为什么不';t正在重新绘制的用户控件
本文关键字:绘制 控件 用户 新绘制 为什么不 | 更新日期: 2023-09-27 18:27:06
我有一个自定义控件,我正在绘制它的一些内容,如下所示:
public class TextItem
{
public Font Font { get; set; }
}
public TaskBox()
{
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.ResizeRedraw, true);
this.items = new List<TextItem>();
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
foreach (TextItem item in items)
{
if (item.Bounds.Contains(e.Location))
{
item.ForeColor = Color.Red;
Cursor.Current = Cursors.Hand;
}
else
{
item.ForeColor = Color.Black;
Cursor.Current = Cursors.Default;
}
}
}
光标确实会相应地改变,但是文本不会改变颜色。我是不是错过了一些初始化?
您没有告诉它重新绘制。当您更改OnPaint()方法中也使用的任何字段或属性时,请调用this.Invalidate();
,以便用户可以看到副作用。
还要注意,分配Cursor.Current是不确定的,通常不会持续很长时间,因为光标形状是由this.Cursor
属性决定的。我怀疑,但没有检查,它应该闪烁。分配属性更好。