2015-10-04 25 views
4

我一直在C#(​​VS Express 2015)中編寫應用程序,並且有一個組合框,我希望預先填充保存的值。我似乎無法讓組合框取得我嘗試設置的值。我創建了一個新項目來證明這個錯誤。C#組合框僅在調試中設置

主要代碼如下。另一個文件聲明tableLayoutPanel。 drawComboBox函數應該使用給定的選定選項和行向面板添加組合框。

public Form1() 
    { 
     InitializeComponent(); 
     drawComboBox(Options.Blue, 0); 
    } 

    public enum Options 
    { 
     Unset, 
     Blue, 
     Yellow, 
     Red 
    }; 

    private void drawComboBox(Options SelectedOption, int row) 
    { 
     System.Windows.Forms.ComboBox colorCombo = new System.Windows.Forms.ComboBox(); 
     colorCombo.DataSource = Enum.GetValues(typeof(Options)); 
     colorCombo.Name = "colorCombo"; 
     this.tableLayoutPanel1.Controls.Add(colorCombo, 0, row); 
     colorCombo.SelectedItem = Options.Yellow; 
    } 

怪異的一部分是,如果我運行正常調試模式或通過其單步組合框會一直顯示程序「未設置」,但如果我打破了顏色設置,並在打開colorCombo項目之前本地調試窗口然後逐步完成,它將被正確設置。考慮到在調試器中查看問題解決了這個問題,這使得找出發生的事情變得非常痛苦。

我將不勝感激任何想法,謝謝。

+2

數據綁定,就像.NET中的許多事情一樣,是懶惰地完成的。何時必須完成。延遲到實際創建基礎本地組合框爲止。您通過查看調試器中的Items屬性確實強制執行此操作。或者在賦值之前添加'var dummy = colorCombo.Handle;'。乾淨的方法是在Load事件中。 –

回答

0

我不知道爲什麼發生這種情況,但我可以告訴你如何修復它 -

請改變這樣&你繪製函數的步驟順序它將很好地工作。

private void drawComboBox(Options SelectedOption, int row) 
    { 
     System.Windows.Forms.ComboBox colorCombo = new System.Windows.Forms.ComboBox(); 
     colorCombo.Name = "colorCombo"; 
     this.tableLayoutPanel1.Controls.Add(colorCombo, 0, row); 

     colorCombo.DataSource = Enum.GetValues(typeof(Options)); 
     colorCombo.SelectedItem = Options.Yellow; 


    } 

看來它依賴於這些兩行代碼的順序

組合使得 「未設置」

 colorCombo.DataSource = Enum.GetValues(typeof(Options)); 
     this.tableLayoutPanel1.Controls.Add(colorCombo, 0, row); 

,如果你扭轉它,它的工作原理

this.tableLayoutPanel1.Controls.Add(colorCombo, 0, row); 
     colorCombo.DataSource = Enum.GetValues(typeof(Options)); 
相關問題