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

416
03 июля 2017, 16:10

Как в 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
Label поверх Canvas с событиями

Label поверх Canvas с событиями

Имеется Canvas и на нём LabelНа канвасе и лейбле имеются события нажатия ЛКМ

254
HtmlAgilityPack и xNet

HtmlAgilityPack и xNet

Всем добра! Использую xNet библиотеку и HtmlAgilityPack

231
Генерация случайного 128-битного числа

Генерация случайного 128-битного числа

Как лучше всего генерировать случайное 128-битное число в С#? Я пока придумал такой способ: с помощью RNGCryptoServiceProvider сгенерировать массив байтов...

281