c# - 如何在 TextBox 中自定义绘制边距?

标签 c# .net winforms

我想在 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);
        }
    }
}

这至少存在三个问题:

  1. 当用户输入一些文本时,该行的一部分会被消隐(变白)。
  2. 当用户用鼠标选择一些文本时,上述情况再次发生。
  3. 滚动 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/

相关文章:

javascript - Html 节点内的信息不可见

c# - 如何使用证书签署 ActiveX DLL

c# - 在 C# 中操作文件中的 XML 名称和值

c# - 是否可以使用 TagLibSharp 从 MP3 文件中删除 Lyrics3v2 标签?

c# - 从另一个线程调用 show 后 Windows 窗体窗体挂起

c# - 在 VS2010 的 .Net 2.0 项目中使用托管 C++ (.Net 2.0) 时出现问题

c# - 为什么具有可为空值的结构的 HashSet 非常慢?

.net - 分层企业应用程序中的 WPF MVVM 架构

c# - 创建一个新的 SaveFileDialog

c# - 为什么我的 .NET 启动时间随着预生成的序列化程序集而增加?