我创建了一个用户定义的控件,该控件继承自Button
类,我想轻松地一次更改所有按钮的视觉样式,而不必将每个实例控件都放置在一个集合中,并且不必遍历它们以更改特定字段。
题
我可以使用静态字段来更改父级base
类中的另一个非静态字段吗?
这是一个简短的示例:
public class KewlButton : Button
{
/// <summary>
/// Changes visual properties of the control in all instances at once.
/// </summary>
class Crossdress
{
static Color BackColor {
private get;
set {
// Set the BackColor in all instances of KewlButton
}
}
}
}
最佳答案
您可以定义一些静态事件或静态委托,这里是委托:
public class KewlButton : Button {
public delegate void SetBackColor(Color color);
static SetBackColor setBackColor;
public KewlButton(){
setBackColor += ChangeBackColor;
Disposed += (s,e) => {
setBackColor -= ChangeBackColor;
};
}
private void ChangeBackColor(Color color){
BackColor = color;
}
public class Crossdress {
public static Color BackColor {
set {
if(setBackColor!=null) setBackColor(value);
}
}
}
}
//Usage
KewlButton.Crossdress.BackColor = Color.Red;
事件的使用与委托非常相似。