Нарисуйте линию в TextBox C # (.NET 3.5) - PullRequest
3 голосов
/ 16 февраля 2010

Мне нужно текстовое поле с нижней строкой, например, поля ввода, используемые в формах.

Я искал такую ​​функциональность, как одиночная граница снизу или что-то в этом роде. Но я думаю, что единственный способ - нарисовать одну строку в текстовом поле.

Следующий код не работает:

private void textEdit1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        if (sender is TextBox)
        {
            TextBox tmp = (TextBox)sender;
            Graphics g = CreateGraphics();
            Pen p = new Pen(System.Drawing.Color.Red, 8);
            g.DrawLine(p, tmp.Location.X, tmp.Location.Y, (tmp.Location.X + tmp.Width), tmp.Location.Y);
            p.Dispose();
            g.Dispose();
        }
    }

Надеюсь, кто-нибудь может помочь! Спасибо!

Ответы [ 3 ]

3 голосов
/ 16 февраля 2010

Пожалуйста, посмотрите на Чертеж владельца Windows.Forms TextBox , который описывает процесс настройки.

0 голосов
/ 16 февраля 2010

Полагаю, это потому, что TextBox действительно нарисован самой ОС. Вы должны были бы создать подкласс TextBox и обрабатывать сообщения WM_PAINT (возможно, также WM_NC_PAINT для границ).

EDIT
Ответ sash предоставляет ссылку, которая показывает вам, как сделать то, что я сказал здесь.

РЕДАКТИРОВАТЬ 2
Для вашего примера, будет ли достаточно установить Border на none и добавить TextBox на панель? Затем вы можете нарисовать панель так, чтобы она имела нижнюю линию, и пока TextBox не заполняет панель, она также будет видна. Это, однако, работает только для одной строки TextBoxes.

0 голосов
/ 16 февраля 2010

Как насчет использования элемента управления RichtextBox и подчеркивания текста?

...