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

时间:2011-05-07 13:57:44

标签: c# scope

我的问题如下:我在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 个答案:

答案 0 :(得分: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 :(得分:1)

您必须先使用FindControl()方法查找对象。

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