我正在尝试在动态创建的comboboxes
上创建4 panel
,但没有显示任何内容。我在这里缺少什么,这是我的代码:
public partial class Form1 : Form
{
ComboBox[] cmb;
public Form1()
{
InitializeComponent();
}
Panel pnl;
private void Form1_Load(object sender, EventArgs e)
{
panel();
createCombo();
}
private void panel()
{
pnl= new Panel();
pnl.Location = new Point(10, 10);
pnl.BorderStyle = BorderStyle.FixedSingle;
pnl.Size = new Size(200, 150);
this.Controls.Add(pnl);
createCombo();
}
private void createCombo()
{
for (int i = 0; i <= 3; ++i)
{
cmb[i] = new ComboBox();
cmb[i].Text = "CodeCall!";
cmb[i].Size = new Size(90, 00);
cmb[i].Location = new Point(i+5, 0);
pnl.Controls.Add(cmb[i]);
}
}
}
界面仅显示面板:
答案 0 :(得分:4)
我最初认为问题是身高:
cmb[i].Size = new Size(90, 00);
然而,事实证明你实际上无法设置ComboBox的高度。
真正的问题是被吞下的NullReferenceException
(您必须在64位系统上)。您永远不会初始化cmb
,因此在调用cmb[i] = new ComboBox()
时它为空。
请参阅http://blog.adamjcooper.com/2011/05/why-is-my-exception-being-swallowed-in.html,了解为何会发生这种情况,但必须满足的条件是(引用):
- 您运行的是64位版本的Windows(无论您的应用程序是针对32位还是64位构建都无关紧要;只是操作系统的位深度)
- 您正在构建WinForms应用
- 您正在使用Visual Studio调试应用程序(使用默认选项进行异常捕获)
- 您的主窗体有一个Load事件处理程序
- 在执行Load处理程序期间,会发生异常
醇>
答案 1 :(得分:1)
测试并且代码工作正常,前提是您没有获得空引用异常。您需要实例化您的数组:
private void createCombo()
{
cmb = new ComboBox[5];
for (int i = 0; i <= 3; ++i)
{
cmb[i] = new ComboBox();
cmb[i].Text = "CodeCall!";
cmb[i].Size = new Size(90, 00);
cmb[i].Location = new Point(i+5, 0);
pnl.Controls.Add(cmb[i]);
}
}
对我来说,组合框出现没有问题。然而它们几乎都出现在彼此之上,你需要设置cmb [i] .Location不同。另外,我个人会推荐这个,而不是你在做什么:
private void createCombo()
{
cmb = new ComboBox[5];
int width = 90;
int height = 25;
int spacing = 5;
for (int i = 0; i <= 3; ++i)
{
ComboBox newBox = new ComboBox();
newBox.Text = "CodeCall!";
newBox.Size = new Size(width, height);
newBox.Location = new Point((i*width)+spacing, 0);
cmb[i] = newBox;
pnl.Controls.Add(newBox);
}
}
答案 2 :(得分:0)
问题是身高:
cmb [i] .Size = new Size(90,00);
答案不包括确切的答案。 问题是你的身高是0。试试例如:
cmb[i].Size = new Size(90, 90);