【发布时间】:2019-02-22 22:02:35
【问题描述】:
我有一些代码可以在单击按钮时创建几个组合框。像这样。
for (int i =0; i< noCol;i++){
tableLayoutPanel2.RowCount = tableLayoutPanel2.RowCount + 1;
tableLayoutPanel2.Controls.Add(new Label() { Text = "العمود " + (i+1) }, 0, (i));
var com = new ComboBox();
com.Name = "reportColumn" + (i + 1).ToString();
g = tableLayoutPanel2.Controls[com.Name] as ComboBox;
c.Add(g);
g.SelectedIndexChanged += new EventHandler(ReportWizardStep1ComboboxSelectedIndexchanged);
tableLayoutPanel2.Controls.Add(com,1,i);}
private void ReportWizardStep1ComboboxSelectedIndexchanged(object sender, EventArgs e){ComboBox combo = sender as ComboBox;
MainForm.exportReport.getDataGridView1().ColumnCount++;
MainForm.exportReport.getDataGridView1().Columns
[MainForm.exportReport.getDataGridView1().ColumnCount - 1].HeaderText = g.Text;
comboValues.Add(g.Text);}
但是,当我运行代码时,该行会抛出异常:
g.SelectedIndexChanged += new EventHandler(ReportWizardStep1ComboboxSelectedIndexchanged);
tableLayoutPanel2.Controls.Add(com,1,i);
例外是:
发生了“System.NullReferenceException”类型的异常。我该如何解决这个问题
【问题讨论】:
-
我正在尝试遵循您的逻辑。您创建一个组合框“com”。然后将同名的 ComboBox 引用到“g”。然后将“g”移动到“c's”控件集合中。然后将“com”添加到 TableLayoutPanel。那么,您是否尝试用 ComboBox 替换 ComboBox?你想做什么让你越过这些障碍?
-
这是什么:
c.Add(g);?为什么要尝试将g设置为tableLayoutPanel2的现有子控件?您不只是创建这个新的 ComboBox 吗?通风处理程序应该由com订阅,而不是这个g(顺便说一句,可能是null,整个事情没有意义)。 -
动态创建组合框后,我尝试使用其参考名称为每个人处理“selectedIndexChanged”。我用这个“g = tableLayoutPanel2.Controls[com.Name] as ComboBox;”获取参考名称
-
引用名称(对新创建控件的引用)是
com。将处理程序附加到此实例并将实例添加到集合中。c.Add(g);还是个谜
标签: c# eventhandler