2013-01-24 94 views
0

我嘗試在winforms項目中使用組合框。無法從組合框控件中獲取價值

這裏是我的代碼:

 private void ShowContoursForm_Load(object sender, EventArgs e) 
     { 
      cbxSelectShape.DisplayMember = dataSetObject.ObjectShapes.ShapeNameColumn.ColumnName; 
      cbxSelectShape.ValueMember = dataSetObject.ObjectShapes.ShapeIDColumn.ColumnName; 
      cbxSelectShape.DataSource = dataSetObject.ObjectShapes; 
     } 


     private void cbxSelectShape_SelectedValueChanged(object sender, EventArgs e) 
     { 
      var id= (int)cbxSelectShape.SelectValue; 
     } 

當我選擇從組合框項目SelectedValueChanged被解僱,並ID變量得到

我需要獲取所選項目的值,但我總是在id變量中獲得null。 任何想法爲什麼我會得到錯誤的結果以及如何修復此代碼?

+1

嘗試使用SelectedIndexChanged事件:http://msdn.microsoft.com/en-us/ library/system.windows.forms.combobox.selectedindexchanged.aspx – Abbas

+0

儘管這幾乎可以肯定不是實現你想要實現的最好方法,但它應該可以工作於IMO。 –

+0

牧師什麼是最好的方式? – Michael

回答

2

你可以得到組合框的索引是這樣的:

private void cbxSelectShape_SelectedValueChanged(object sender, EventArgs e) 
    { 
     var id= ((ComboBox)sender).SelectedIndex; 
    } 
1

,您應該使用組合框的SelectedValue屬性來獲取價值,具有ValueMemberShapeID你的情況)有關:

var id = ((ComboBox)sender).SelectedValue; 

SelectedIndex返回在組合框中選擇的項目的索引。此外,如果使用一個組合框此處理程序,你不需要投發件人 - 只需使用您的組合框的變量:

var id = cbxSelectShape.SelectedValue; 
+0

我仍然收到零! – Michael

+0

@Michael你確定你的表中有數據嗎?設置一個斷點並監視'cbxSelectShape.Items [cbxSelectShape.SelectedIndex]'。你看到了什麼?順便說一句,如果你投射到「int」,你的'id'變量不能爲空。 –