我已经使用下面的代码创建了一个文本框,但是在文本框的任何情况下,paint方法都不会被触发。你能建议一个触发OnPaint()的解决方案吗?
public class MyTextBox : TextBox
{
protected override void OnPaintBackground(PaintEventArgs pevent)
{
base.OnPaintBackground(pevent);
}
protected override void OnPaint(PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics,this.Bounds, Color.Red,ButtonBorderStyle.Solid);
base.OnPaint(e);
}
protected override void OnTextChanged(EventArgs e)
{
this.Invalidate();
this.Refresh();
base.OnTextChanged(e);
}
}
3条答案
按热度按时间qlckcl4x1#
默认情况下,除非您通过调用以下命令将TextBox注册为自绘制控件,否则不会在TextBox上调用OnPaint:
例如,从MyTextBox构造函数。
vtwuwzda2#
您需要切换
OnPaint
中的呼叫base.OnPaint()
像往常一样绘制TextBox
。如果在base
调用之前调用DrawBorder
*,则它将再次被基本实现覆盖。但根据documentation,
TextBox
不支持Paint
事件:此API支持产品基础结构,不打算直接从代码中使用。
在重绘控件时发生。此事件与此类无关。
所以本·杰肯的答案应该能解决这个问题。
soat7uwm3#
我所做的是在窗口收到
WM_PAINT
消息后创建图形对象。**C#
*VB.NET