C# 使用在另一个控件事件中的表单加载时创建的控件
Posted
技术标签:
【中文标题】C# 使用在另一个控件事件中的表单加载时创建的控件【英文标题】:C# using control created on form load in another control event 【发布时间】:2011-08-20 18:15:39 【问题描述】:我的问题如下:我在表单加载时创建了2个控件,按钮和组合框,我也有按钮事件,但该事件应该能够看到新创建的组合框。当我尝试用它的名字来调用组合时,它说它在这个上下文中不存在 私人无效Form1_Load(对象发送者,EventArgs e) 按钮 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
有没有办法让它工作?
【问题讨论】:
【参考方案1】:只有在带有 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。 Variable scope 是所有语言的基础,OP 必须阅读它。【参考方案2】:您必须先使用FindControl() 方法来查找对象。
private void przycisk_Click(object sender, EventArgs e)
ComboBox kombo = (ComboBox)FindControl("kombo");
kombo.Items.Add("Panel");
【讨论】:
以上是关于C# 使用在另一个控件事件中的表单加载时创建的控件的主要内容,如果未能解决你的问题,请参考以下文章