C# 如何在文本框顶部绘制
我有一个带文本框的winform,我想在上面画一些GDI图形。文本框没有要挂接的C# 如何在文本框顶部绘制,c#,winforms,textbox,C#,Winforms,Textbox,我有一个带文本框的winform,我想在上面画一些GDI图形。文本框没有要挂接的Paint()事件,因此我假设这一切都必须发生在表单的Paint事件中。作为测试,我正在从原点到文本框内的某个位置绘制一个矩形,带有: private void FindForm_Paint(object sender, PaintEventArgs e) { using (Pen pen = new Pen(Color.Blue)) { e.G
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);
}
}
问题是,当我运行时,首先绘制图形,然后在我的线条顶部渲染文本框。我想在渲染文本框后绘制线条
另外,我没有使用
form.SetStyle()
函数对表单进行任何设置。System.Windows.Forms.TextBox类确实有绘制事件:。根据MSDN,它不打算在代码中使用,但如果不想使用继承创建自己的控件,则可能没有任何其他选项
如果要在文本框内绘制,应使用其绘画和从其控制柄创建的图形对象。如果使用窗体的“偶数绘制”,当TextBox接收到自己的绘制事件时,它将覆盖上一次绘制,因为TextBox位于窗体顶部
如果未使用TextBox的Paint事件,则仍然可以使用CreateGraphics方法获取其图形对象。但是,在文本框的绘制事件之后进行绘制时必须小心,否则它可能会被覆盖
最后,您可能需要创建自己的从TextBox继承的控件。继承是在Windows窗体编程中重写默认行为的一种强大方法
如果需要其他帮助,请告诉我。System.Windows.Forms.TextBox类确实有绘制事件:。根据MSDN,它不打算在代码中使用,但如果不想使用继承创建自己的控件,则可能没有任何其他选项 如果要在文本框内绘制,应使用其绘画和从其控制柄创建的图形对象。如果使用窗体的“偶数绘制”,当TextBox接收到自己的绘制事件时,它将覆盖上一次绘制,因为TextBox位于窗体顶部 如果未使用TextBox的Paint事件,则仍然可以使用CreateGraphics方法获取其图形对象。但是,在文本框的绘制事件之后进行绘制时必须小心,否则它可能会被覆盖 最后,您可能需要创建自己的从TextBox继承的控件。继承是在Windows窗体编程中重写默认行为的一种强大方法
如果您需要其他帮助,请告诉我。绘制
TextBox
控件可能比较棘手,因为它只是本机Win32TextBox
控件的包装
获取自定义绘制例程工作所需处理的WM_PAINT
消息的最简单方法是继承
这是一篇很好的分步文章,展示了如何在显示红色波浪下划线的上下文中做到这一点:(原始链接已失效;被存档版本替换)所有者绘制
TextBox
控件可能比较棘手,因为它只是本机Win32TextBox
控件的包装
获取自定义绘制例程工作所需处理的WM_PAINT
消息的最简单方法是继承
这是一篇优秀的分步文章,展示了如何在显示红色波浪下划线的上下文中执行此操作:(原始链接已失效;由存档版本替换)可能的重复:。另请参见:不是重复的,因为它们是TextBox的子类。我不想自己控制自己。我只想在标准的winforms文本框上画图。@Cody Gray-谢谢你的链接,我会查出来的。我一直想知道Aspell是如何做到这一点的。@Cody Gray-把codeblog链接作为答案,我会给你正确的答案。我使用了这项技术,它的效果和预期的一样。好的,我添加了它作为答案。我很高兴这对您有效。可能重复:。另请参见:不是重复的,因为它们是TextBox的子类。我不想自己控制自己。我只想在标准的winforms文本框上画图。@Cody Gray-谢谢你的链接,我会查出来的。我一直想知道Aspell是如何做到这一点的。@Cody Gray-把codeblog链接作为答案,我会给你正确的答案。我使用了这项技术,它的效果和预期的一样。好的,我添加了它作为答案。我很高兴这对您有效。我正在尝试使用继承在文本框顶部绘制,并重写OnPaint方法,它没有额外绘制任何内容。当我给它添加一个断点时,它并没有中断。我遗漏了什么?我正在尝试使用继承在文本框顶部绘制,并重写OnPaint方法,但它没有绘制任何额外内容。当我给它添加一个断点时,它并没有中断。我错过了什么?