в C# запросить ввод в форму textbox

159
21 сентября 2018, 15:50

Как в C# запросить ввод в форму, если она пуста?

Answer 1

Сделать это можно разными способами.

Простейший. Это по сути то, что уже предложил Egor. Помещаем Label рядом с нашим текстбоксом. Подписываем текстбокс на событие TextChanged, в нём пишем следующий код:

private void TextBox1_TextChanged(object sender, EventArgs e)
{
    if (string.IsNullOrWhiteSpace(textBox1.Text))
        label.Text = "Введите значение";
    else
        label.Text = "";
}

Без применения дополнительного ярлыка. Подписываем наш TextBox на два события: Enter и Leave.

private void textBox2_Enter(object sender, EventArgs e)
{
    if (textBox2.Text == "Введите значение")
    {
        textBox2.Text = "";
        textBox2.ForeColor = SystemColors.WindowText;
    }
}
private void textBox2_Leave(object sender, EventArgs e)
{
    if (textBox2.Text.Trim() == "")
    {
        textBox2.Text = "Введите значение";
        textBox2.ForeColor = SystemColors.GrayText;
    }
}

Создаём класс-наследник, в котором посылаем специальное сообщение с помощью WinAPI функции SendMessage. В результате, когда TextBox пустой и не в фокусе, в нём будет выводиться watermark.

class WatermarkedTextBox : TextBox
{
    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wp, string lp);
    protected override void OnHandleCreated(EventArgs e)
    {
        const uint msg = 0x1501;
        base.OnHandleCreated(e);
        if (IsHandleCreated)
        {
            SendMessage(Handle, msg, IntPtr.Zero, "Введите значение");
        }
    }        
}

Ещё один способ - применение класса ErrorProvider.

Добавьте на форму этот компонент. Задайте ему желаемые значения свойств (BlinkStyle). Подпишите TextBox на событие Validating. В нём пишете код:

private void textBox3_Validating(object sender, CancelEventArgs e)
{
    if (textBox3.Text.Trim() == "")
        errorProvider1.SetError(textBox3, "Введите значение");
    else
        errorProvider1.SetError(textBox3, "");
}

В итоге, когда данный текстбокс теряет фокус, будет происходить валидация. Если значение не введено, рядом с ним появится красный значок провайдера ошибки. При наведении на него мышки появится ToolTip с текстом ошибки.

В принципе, можно совместить ErrorProvider с одним из других способов.

Answer 2
if(TextBox.Text == "")
{
   Label1.Text = "Поле TextBox должно быть заполнено";
   return;
}

Необходимо добавить в форме лейбл, который будет пустой (без текста)

Вообще, подробнее описываете, что вам нужно. Куда вы хотите вывести сообщение?

READ ALSO
Использование Properties.Settings.Default

Использование Properties.Settings.Default

Как получить доступ к переменной из файла settings в новом классе? Те

170
Возможно ли игнорировать участок кода в зависимости от платформы?

Возможно ли игнорировать участок кода в зависимости от платформы?

В свете того, что C# используется много на каких платформах, кусок старого кода можно так или иначе использовать на них на всех, но если программа...

154
Как выполнить js code в asp net mvc?

Как выполнить js code в asp net mvc?

Есть html файл,необхадимо его открыть и в нем вызвать функцию и получить результат,в wpf это делалось при помощи webbrowser ,а в aspnet mvc без понятия

178
Un/boxing в C# ; от object к int

Un/boxing в C# ; от object к int

Не могли бы вы подсказать, почему явный downcast числового object'a (без предварительного upcast'a) доступен только к int, применяя к другим типам данных...

156