首页 文章

C#使用在另一个控件事件中的表单加载时创建的控件

提问于
浏览
1

我的问题如下:我在Form load,button和combobox上创建了2个控件,我也有按钮事件,但事件应该能够看到新创建的组合框 . 当我尝试通过它的名称调用组合时,它表示它在此上下文中不存在private void Form1_Load(object sender,EventArgs e){Button przycisk = new Button(); przycisk.Name =“przycisk”; przycisk.Dock = DockStyle.Bottom; przycisk.Text =“Wybierz”;

ComboBox kombo = new ComboBox(); 
        kombo.Name = "kombo";
        kombo.Dock = DockStyle.Bottom;
        kombo.Items.Add("Przycisk");   
        kombo.Items.Add("Etykeita");
        kombo.Items.Add("Pole tekstowe");

        Controls.Add(kombo);  
        Controls.Add(przycisk);

        przycisk.Click += new EventHandler(przycisk_Click); 

    }

    private void przycisk_Click(object sender, EventArgs e)
    {

        kombo.Items.Add("Panel");  //just an example 
    }
}

有没有办法使它工作?

2 回答

  • 2

    只有在runat =“server”标记中使用的控件才是页面上的类变量 . 它们实际上是在设计器文件中定义的 .

    你想要做的是在类中添加类似下面的类,你有一个类变量,然后在页面加载函数中分配kombo . 然后,它将存在于您的单击事件处理程序中 .

    // kombo is now scoped for use throughout this class
     ComboBox kombo = null;
    
     private void Form1_Load(object sender, EventArgs e)
        {
            Button przycisk = new Button(); 
            przycisk.Name = "przycisk";
            przycisk.Dock = DockStyle.Bottom;
            przycisk.Text = "Wybierz";
    
            // Assign to our kombo instance
            kombo = new ComboBox(); 
            kombo.Name = "kombo";
            kombo.Dock = DockStyle.Bottom;
            kombo.Items.Add("Przycisk");   
            kombo.Items.Add("Etykeita");
            kombo.Items.Add("Pole tekstowe");
    
            Controls.Add(kombo);  
            Controls.Add(przycisk);
    
            przycisk.Click += new EventHandler(przycisk_Click); 
    
        }
    
        private void przycisk_Click(object sender, EventArgs e)
        {
            // Using the kombo we created in form load, which is still referenced
            // in the class
            kombo.Items.Add("Panel");  //just an example 
        }
    
  • 1

    您必须首先使用FindControl()方法来查找对象 .

    private void przycisk_Click(object sender, EventArgs e)
    {
       ComboBox kombo = (ComboBox)FindControl("kombo");
       kombo.Items.Add("Panel");
    }
    

相关问题