Я хочу нарисовать линию поля в 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);
}
}
}
Есть как минимум три проблемы с этим:
- Когда пользователь вводит какой-либо текст, часть строки отключается (становится белой).
- Когда пользователь выделяет текст мышью, вышеописанное повторяется снова.
- Строка мигает при прокрутке TextBox.
Я заметил, что TED Notepad (который использует элемент управления EDIT Win32) может рисовать поле без каких-либо проблем, поэтому кажется, что можно делать то, что я хочу. Кто-нибудь может мне посоветовать как?