为什么不';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;
            }
        }
    }

光标确实会相应地改变,但是文本不会改变颜色。我是不是错过了一些初始化?

为什么不';t正在重新绘制的用户控件

您没有告诉它重新绘制。当您更改OnPaint()方法中也使用的任何字段或属性时,请调用this.Invalidate();,以便用户可以看到副作用。

还要注意,分配Cursor.Current是不确定的,通常不会持续很长时间,因为光标形状是由this.Cursor属性决定的。我怀疑,但没有检查,它应该闪烁。分配属性更好。