Как рисовать поверх TextBox - PullRequest
       3

Как рисовать поверх TextBox

1 голос
/ 07 декабря 2010

У меня есть winform с TextBox, и я хочу нарисовать поверх него графику GDI. В текстовом поле нет события Paint(), к которому можно подключиться, поэтому я предполагаю, что все это должно происходить в событии Paint формы. В качестве теста я рисую прямоугольник от начала координат до местоположения в текстовом поле с помощью:

    private void FindForm_Paint(object sender, PaintEventArgs e)
    {
        using (Pen pen = new Pen(Color.Blue))
        {
            e.Graphics.DrawRectangle(pen, 0, 0, point.X, point.Y);
        }
    }

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

PS. Я не сделал никаких настроек для формы с помощью функции Form.SetStyle().

Ответы [ 2 ]

4 голосов
/ 11 декабря 2010

Может быть относительно сложно нарисовать владелец элемента управления TextBox, потому что это просто оболочка вокруг собственного элемента управления Win32 TextBox.

Самый простой способ перехватить сообщения WM_PAINT, которые необходимо обработать для работы пользовательских процедур рисования, - это наследование от NativeWindow класса .

Вот отличная пошаговая статья, показывающая, как это сделать в контексте отображения красных волнистых подчеркиваний: Рисование владельцем текстового поля Windows.Forms ( исходная ссылка не работает; заменена на архивную версию)

2 голосов
/ 07 декабря 2010

Класс System.Windows.Forms.TextBox имеет событие Paint: http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.paint.aspx. В соответствии с MSDN оно не предназначено для использования в вашем коде, но у вас может не быть никакой другой опции, если вы это сделаетене хотите создавать свой собственный элемент управления, используя наследование.

Если вы хотите рисовать внутри TextBox, вы должны использовать его Paint и объект Graphics, созданный из его дескриптора.Если вы рисуете, используя даже рисование формы, когда TextBox получает свое собственное событие Paint, он отменяет предыдущее рисование, поскольку TextBox находится над формой.

Если вы не используете событие Paint элемента TextBoxвы все равно можете получить его объект Graphics, используя метод CreateGraphics.Однако вам нужно быть осторожным, чтобы рисовать после события TextBox Paint, в противном случае оно может быть переопределено.

В конце вам может понадобиться создать собственный элемент управления, наследующий от TextBox.Наследование - это мощный метод переопределения поведения по умолчанию в программировании Windows Forms.

Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...