我在Formload里调用了另外自己写的一个类动态创建了很多控件,有几百个,现在我在窗口的每个按钮里取这些动态创建的控件的值得时候每次都要如下声明一下:
 Panel p001 = panel1.Controls["pn001"] as Panel;
 TextBox tb001_1 = p001.Controls["txt1_001_1"] as TextBox;
其中,pn001和txt1_001_1为动态创建。每个按钮里都要这样声明很繁琐,光声明的语句就有上千条,有没有什么办法只声明一次,所有按钮都可用啊?我试过在formload里声明,但在按钮里tb001_1不可见,我也试过做成一个public方法,tb001_1也是在按钮里不可见,我还是过直接在方法外面声明成窗口的成员变量,但提示panel1字段初始值无法引用非静态字段的错误。
大侠们帮我看看我该怎么做。

解决方案 »

  1.   

    Class ControlManager
    {
        public Static ControlManager Instance = new ....;
        
        private ControlManager(){}
        
        DictionaryEntry<string, Control> controls = new ....;
        
        public Panel RetrievePanel(string name)
        {
            ...
        }
        
        public void AddContrl(string name, Control ctrl)
        {
           controls.Add(name, ctrl);
        }    public TextBox RetrieveTextBox(string name)
        {
            ...
        }
    }
    用的时候
    void fun()
    {
        Panel p = ControlManager.Instance.RetrievePanel("sp1234");
    }
      

  2.   

    在Form1类添加成员变量就可以了:
    private Panel p001=null;
    private TextBox tb001_1=null;这样在Form1类任何地方都可以使用这几个定义的成员变量
      

  3.   

      foreach(Control ctrl in panel1.Controls)
      {
      ...
      }