【问题标题】:Why doesn't a user control being redrawed?为什么不重绘用户控件?
【发布时间】:2014-10-19 21:56:03
【问题描述】:

我有一个自定义控件,我正在绘制它的一些内容,如下所示:

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;
            }
        }
    }

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

【问题讨论】:

  • 你没有告诉它使用新颜色重绘
  • 这实际上是答案。控件必须失效。

标签: c# winforms user-controls


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2013-07-11
    相关资源
    最近更新 更多