2013-03-08 52 views
0

我正尝试在动态创建的panel上创建4个comboboxes,但没有显示任何内容。缺少什么我在这里,这是我的代码:在动态面板上创建动态组合框

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]); 
      } 

     } 
    } 

界面只显示面板:

enter image description here

回答

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); 
    } 
} 
4

我最初以为这个问题是高度:

cmb[i].Size = new Size(90, 00); 

然而,事实证明你实际上不能为设置组合框的高度。


真正的问题是,这是获得吞噬(你必须是一个64位系统上)一个NullReferenceException。您从不初始化cmb,因此在调用cmb[i] = new ComboBox()时它为空。

http://blog.adamjcooper.com/2011/05/why-is-my-exception-being-swallowed-in.html一个解释,为什么出现这种情况,但必须满足的条件是:(引用):

  1. 要在Windows的64位版本上运行(您的应用程序是否为32位或64位构建并不重要;仅限于操作系统的位深度)
  2. 您正在构建WinForms应用程序
  3. 您正在使用Visual Studio调试应用程序(使用Exception捕获的默认选项)
  4. 你的主要形式具有Load事件处理程序
  5. 您的加载处理程序的执行过程中,发生异常
+1

哇,好眼睛那里! – 2013-03-08 13:29:37

+0

有趣的是,当我设置高度时,它永远不会覆盖默认值25.将其设置为0似乎没有效果。这让我想知道,你如何设定高度? – 2013-03-08 13:51:51

+0

@MikeC。这很有趣,显然你不能设置组合框的高度。 – 2013-03-08 14:00:13

0

的问题是高度:

CMB [I] .Size =新尺码(90,00);

答案不包括确切答案。 问题是你的身高有0。试试例如:

cmb[i].Size = new Size(90, 90);