我创建了一个用户定义的控件,该控件继承自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;


事件的使用与委托非常相似。

10-07 12:18