2013-01-01 143 views
0

I'm所有的想法在這裏對象引用不設置到對象的實例

的事情是,即時通訊使用兩個組合框,我想從兩個組合框獲得價值在wpf中的DataGrid中顯示內容。

我有這個函數從兩個組合框中獲取值。這很好。

private void cboxYearChange(object sender, SelectionChangedEventArgs e) 
    { 
     ComboBoxItem typeItemYear = (ComboBoxItem)comboBox2.SelectedItem; 
     string valueYear = typeItemYear.Content.ToString(); 

     ComboBoxItem typeItemMonth = (ComboBoxItem)comboBox1.SelectedItem; 
     string valueMonth = typeItemMonth.Content.ToString(); 
} 

但後來我想創建另一個函數來檢查的其他組合框的變化:

private void cboxMonthChange(object sender, SelectionChangedEventArgs e) 
    { 
     ComboBoxItem typeItemYear = (ComboBoxItem)comboBox2.SelectedItem; 
     string valueYear = typeItemYear.Content.ToString(); 

     ComboBoxItem typeItemMonth = (ComboBoxItem)comboBox1.SelectedItem; 
     string valueMonth = typeItemMonth.Content.ToString(); 

} 

我可以建立,但是當我運行此我得到未設置爲實例的對象引用ComboBoxItem上的對象錯誤typeItemYear =(ComboBoxItem)comboBox2.SelectedItem; line in the cboxMonthChange function

我在這裏丟失了什麼?

回答

0

在選擇某物之前,SelectedItem爲null。除非它們同時改變(這是不可能的,因爲這些事件是按順序觸發的),comboBox1.SelectedItem或comboBox2.SelectedItem上的類型轉換將拋出異常。

檢查SelectedItem是否設置了方法。 或使用另一個演員表,如:

ComboBoxItem item1 = comboBox1.SelectedItem as ComboBoxItem; 如果(ITEM1!= NULL){ // 做一些 }

希望這有助於:-)

+0

對不起,缺乏代碼格式。菜單在我的手機上不可見:-) –

+0

後面的選項不起作用。通過檢查SelectedItem是否設置了方法,你是什麼意思? – tingason

0

1)你不應該在代碼中儘可能指控件的名稱。
因此,您可以知道,例如,在SelectionChanged 處理程序中通過將Sender轉換爲ComboBox來更改哪個組合框。
2)但在這種簡單的情況下,只需使用公共屬性並將它們綁定到您的ComboBox的 即可:所有操作都將在無代碼的情況下完成。

<ComboBox x:Name="YearSelectCB" SelectedItem="{Binding SelectedYear}"> 
<ComboBox x:Name="MonthSelectCB" SelectedItem="{Binding SelectedMonth}"> 

(你可以在 窗口中加載事件處理程序(DataContext的設置窗口的DataContext的在幾個方面,比如=本))

相關問題