我创建了一个自定义文本框,其边框为红色。然后我启动我的应用程序,但这个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的快照)?
答案 0 :(得分:0)
您不应该创建新的Graphics对象。使用e.Graphics.DrawRectangle
可以使用现有的Graphics对象绘制控件,如下所示:
Pen redPen = new Pen(Color.Red);
e.Graphics.DrawRectangle(redPen, this.Location.X,
this.Location.Y, this.Width, this.Height);
另外,请在此重复我对残疾人旗帜的评论。添加自定义禁用标志毫无意义。使用Windows窗体TextBox控件已提供的Enabled属性。
编辑:请注意上述代码在TextBox的情况下无效,因为它处理的绘图方式不同。 TextBox基本上只是本机Win32 TextBox的包装器,所以你需要听一些告诉它重绘自己的消息。您还需要获取设备上下文的句柄并将其转换为托管的Graphics对象才能绘制。
请查看this article以获取有关如何在TextBox上绘制的代码和说明。特别是部分 2。绘制在页面底部的TextBox 上。