2013-01-24 46 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'变量不能为空。 –