2013-03-08 74 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);