[英]C# using control created on form load in another control event
我的问题如下:我在窗体加载,按钮和组合框上创建了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
}
}
有没有办法使其工作?
只有与runat =“ server”一起用于标记的控件才是页面上的类变量。 它们实际上是在设计器文件中定义的。
您要做的是在类中添加一个类似于以下内容的类,在其中有一个类变量,然后在页面加载函数中分配kombo。 然后,它将存在于您的click事件处理程序中。
// 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
}
您将必须使用FindControl()方法首先查找对象。
private void przycisk_Click(object sender, EventArgs e)
{
ComboBox kombo = (ComboBox)FindControl("kombo");
kombo.Items.Add("Panel");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.