Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在文本框顶部绘制_C#_Winforms_Textbox - Fatal编程技术网

C# 如何在文本框顶部绘制

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

我有一个带文本框的winform,我想在上面画一些GDI图形。文本框没有要挂接的
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
控件可能比较棘手,因为它只是本机Win32
TextBox
控件的包装

获取自定义绘制例程工作所需处理的
WM_PAINT
消息的最简单方法是继承


这是一篇很好的分步文章,展示了如何在显示红色波浪下划线的上下文中做到这一点:(原始链接已失效;被存档版本替换)

所有者绘制
TextBox
控件可能比较棘手,因为它只是本机Win32
TextBox
控件的包装

获取自定义绘制例程工作所需处理的
WM_PAINT
消息的最简单方法是继承


这是一篇优秀的分步文章,展示了如何在显示红色波浪下划线的上下文中执行此操作:(原始链接已失效;由存档版本替换)

可能的重复:。另请参见:不是重复的,因为它们是TextBox的子类。我不想自己控制自己。我只想在标准的winforms文本框上画图。@Cody Gray-谢谢你的链接,我会查出来的。我一直想知道Aspell是如何做到这一点的。@Cody Gray-把codeblog链接作为答案,我会给你正确的答案。我使用了这项技术,它的效果和预期的一样。好的,我添加了它作为答案。我很高兴这对您有效。可能重复:。另请参见:不是重复的,因为它们是TextBox的子类。我不想自己控制自己。我只想在标准的winforms文本框上画图。@Cody Gray-谢谢你的链接,我会查出来的。我一直想知道Aspell是如何做到这一点的。@Cody Gray-把codeblog链接作为答案,我会给你正确的答案。我使用了这项技术,它的效果和预期的一样。好的,我添加了它作为答案。我很高兴这对您有效。我正在尝试使用继承在文本框顶部绘制,并重写OnPaint方法,它没有额外绘制任何内容。当我给它添加一个断点时,它并没有中断。我遗漏了什么?我正在尝试使用继承在文本框顶部绘制,并重写OnPaint方法,但它没有绘制任何额外内容。当我给它添加一个断点时,它并没有中断。我错过了什么?