刷新自定义控件的更好方法
本文关键字:方法 更好 自定义控件 刷新 | 更新日期: 2023-09-27 17:57:41
我正在学习如何编写自定义控件以及管理和引发事件。我创建了一个毫无意义的自定义控件,一行你可以添加到main上并决定大小和颜色。我还做了一个活动来取代OnClick(我只是在学习),我称之为MyClick。这是代码
public class EditedLine : UserControl
{
public delegate void LineClickEventHandler(object sender, EditedLineClickEventArgs e);
[Description("Occurs when control is clicked")]
public event LineClickEventHandler MyClick;
private Color _color;
private float _size;
public EditedLine()
{
_color = Color.Black;
_size = 3;
}
public EditedLine(Color color, float size)
{
_color = color;
_size = size;
}
public Color LineColor
{
get { return _color; }
set { _color = value; }
}
public float LineSize
{
get { return _size; }
set { _size = value; }
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawLine(new Pen(_color, _size), new Point(0, 0), new Point(this.Size.Width, 0));
}
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
OnLineClick(new EditedLineClickEventArgs());
}
protected virtual void OnLineClick(EditedLineClickEventArgs e)
{
if (MyClick != null)
{
MyClick(this, e);
}
}
}
}
幸运的是,一切都在运转。我可以在控件工具箱中看到我的控件,我可以添加到我的项目中,即使事件正在工作。但是,如果在MyClick中,我试图更改Line的颜色,则不会发生任何事情。我必须使用此权限之前的权限:
public Color LineColor
{
get { return _color; }
set { _color = value; this.Refresh(); }
}
public float LineSize
{
get { return _size; }
set { _size = value; this.Refresh(); }
}
所以我在问自己,是否有更好的方法来刷新控制。如果我重画一条线很容易,但如果它是一个更复杂的控件?我想做一个"Redraw"私有方法,但我不知道如何访问EditedLine istance的"Graphic"对象。"INotifyPropertyChanged"有用吗?但"图形"仍然是我最大的问题
如果您正在讨论更复杂的控制,请考虑将Refresh
更改为Invalidate
以使UserControl的特定区域无效。要获得Graphics
对象,只需调用CreateGraphics
方法。