Как нарисовать поле в TextBox? - PullRequest
       0

Как нарисовать поле в TextBox?

2 голосов
/ 08 сентября 2011

Я хочу нарисовать линию поля в 80 символов в текстовом поле WinForms. Вот что я попробовал в моем подклассе TextBox:

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    const int WM_PAINT = 0x00F;
    if (m.Msg == WM_PAINT) {
        DrawMargin();
    }
}

void DrawMargin()
{
    using (Pen pen = new Pen(Color.Gray, 1)) {
        using (Graphics graphics = CreateGraphics()) {
            float charWidth = graphics.MeasureString("M", Font).Width;
            graphics.DrawLine(pen, charWidth * 80, 0, charWidth * 80, Height);
        }
    }
}

Есть как минимум три проблемы с этим:

  1. Когда пользователь вводит какой-либо текст, часть строки отключается (становится белой).
  2. Когда пользователь выделяет текст мышью, вышеописанное повторяется снова.
  3. Строка мигает при прокрутке TextBox.

Я заметил, что TED Notepad (который использует элемент управления EDIT Win32) может рисовать поле без каких-либо проблем, поэтому кажется, что можно делать то, что я хочу. Кто-нибудь может мне посоветовать как?

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

Насколько я могу судить, лучший способ сделать это - просто поместить WinForms.Panel поверх TextBox:

class FooTextBox : TextBox
{
    public FooTextBox()
    {
        margin = new Panel();

        margin.Enabled   = false;
        margin.BackColor = Color.LightGray;
        margin.Top       = 0;
        margin.Height    = ClientSize.Height;
        margin.Left      = <whatever>;
        margin.Width     = 1;

        Controls.Add(margin);
    }

    Panel margin;
}

Так как панель не включена, она не требует ввода с мыши.

1 голос
/ 08 сентября 2011

Я не уверен в этом методе. Но одна вещь, на которую вы могли бы обратить внимание, это вставить изображение в текстовое поле. Изображение, конечно, будет вашим полем, и текст будет автоматически начинаться после изображения. Чтобы включить изображение в текстовое поле, см. Как вставить изображение в RichTextBox?

Редактировать: Я также нашел эту статью http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox/, которая, кажется, облегчает рисование на фоне текстового поля. Описанные здесь методы, кажется, помогут вам достичь того, что вам нужно.

Надеюсь, это поможет.

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