我正在學習如何編寫自定義控件並管理和引發事件。 我創建了一個毫無意義的自定義控件,您可以添加一條主線並決定大小和顏色。我也做了一個事件來取代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);
}
}
}
}
luckly萬物工作。我可以在控件工具箱中看到我的控件,並且可以添加到我的項目中,即使事件正在運行。 但是,如果MyClick內部我嘗試更改線的顏色,則什麼也不會發生。 我之前這一翻譯使用的人的這種禮儀:
public Color LineColor
{
get { return _color; }
set { _color = value; this.Refresh(); }
}
public float LineSize
{
get { return _size; }
set { _size = value; this.Refresh(); }
}
所以我問自己,如果有更好的方式來刷新控制。如果我重繪一條線很容易做,但如果它是一個更復雜的控制?我想要做一個'重繪'私人方法,但我不知道如何訪問EditedLine istance的'Graphic'對象。 'INotifyPropertyChanged'有用嗎?但'圖形'仍然是我最大的問題
我正在尋找重繪控件(或其中的一部分)的最佳方式,而無需在每個屬性更改處調用refresh() – Andrea