我想在 WinForms TextBox 中的 80 个字符处绘制一条边距线。这是我在我的 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 记事本(它使用 Win32 EDIT 控件)能够毫无问题地绘制边距,因此似乎可以做我想做的事。谁能告诉我怎么做?
最佳答案
我不确定这个方法。但是您可以尝试的一件事是将图像插入文本框中。图片当然是你的边距,文字会在图片之后自动开始。要在文本框中包含图片,请参阅 How can I insert an image into a RichTextBox?
编辑:我也找到了这篇文章http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox/这似乎有助于在文本框的背景中绘画。此处描述的方法似乎可以帮助您实现所需目标。
希望这对您有所帮助。
关于c# - 如何在 TextBox 中自定义绘制边距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348745/