为什么我的自定义控件textbox'的onpaint overrides方法从未被调用
本文关键字:方法 overrides 调用 onpaint 自定义控件 我的 textbox 为什么 | 更新日期: 2023-09-27 18:05:53
我已经创建了一个自定义的文本框,边框为红色。然后我启动我的应用程序,但这个OnPaint从未被调用。
我的代码是:
public partial class UserControl1 : TextBox
{
public string disable, disableFlag;
public string Disable
{
get
{
return disable;
}
set
{
disable = value;
disableFlag = disable;
//OnPaint(PaintEventArgs.Empty);
}
}
public UserControl1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
this.Text = "testing 1";
if (disable == "true")
{
Pen redPen = new Pen(Color.Red);
Graphics graphics = this.CreateGraphics();
graphics.DrawRectangle(redPen, this.Location.X,
this.Location.Y, this.Width, this.Height);
// base.DrawFrame(e.Graphics);
}
}
}
请让我知道是什么问题(这里是winform http://prntscr.com/ceq7x5的快照)?
你不应该创建一个新的图形对象。使用e.Graphics.DrawRectangle
可以使用已经存在的图形对象在控件上绘制,如下所示:
Pen redPen = new Pen(Color.Red);
e.Graphics.DrawRectangle(redPen, this.Location.X,
this.Location.Y, this.Width, this.Height);
同样,在这里重复一下我关于禁用标志的评论。添加自定义禁用标志是没有意义的。使用Windows窗体文本框控件已经提供的Enabled属性。
编辑:请注意,上面的代码不工作在TextBox的情况下,因为它处理绘图不同。TextBox基本上只是本机Win32 TextBox的包装器,所以你需要听取相当多的消息,告诉它重新绘制自己。你还需要获得设备上下文的句柄,并将其转换为能够绘图的托管图形对象。
查看这篇文章,了解如何在TextBox顶部绘制的代码和解释。特别是2部分。在页面底部文本框上绘图