我有一个属性:
public override int Length
{
get { return _length; }
set
{
if (value > MaxLength)
throw new ArgumentException(
"Canoes are limited to 21 feet long!");
else if (value < MinLength)
throw new ArgumentException(
"The shortest canoe available is 12 feet long");
else
_length = value;
}
在我的表单中,我有一个值为14,17,21的comboBox。我想将这些int传递给我的length属性。我怎么做?我使用下面的代码,但它将selectedindex 0,1,2传递给我的属性并抛出MinLength的异常。如何将14,17,21传递给长度?
Canoe c = new Canoe()
{
Brand = txtBrand.Text,
Model = txtModel.Text,
ModelYear = cboModelYear.SelectedIndex,
Length = cboLength.SelectedIndex,
};
this.Tag = c;
this.DialogResult = DialogResult.OK;
答案 0 :(得分:1)
如果您已将ValueMember
属性设置为组合框,则值14,17,21
将存储为数据成员。那么你可以使用SelectedValue
属性。但是,如果您没有将这些值绑定为组合框的数据成员,则必须使用组合框的.Text
或.SelectedItem
属性。
例如,如果你像这样绑定组合框
cmb.DisplayMember = "Length";
cmb.ValueMember = "Length"; //To use the SelectedValue property you must have assigned this property first.
cmb.DataSource = dbSource;
然后你可以得到这样的价值。
Length = Convert.ToInt32(cboLength.SelectedValue),
但是,如果您没有分配ValueMember属性或手动填充组合框,那么在这种情况下您不能使用SelectedValue
属性。
//If you are populating combobox with datasource
cmb.DisplayMember = "Length";
cmb.DataSource = dbSource;
//Then you can use .Text Property to get the value
int length = 0;
if (int.TryParse(cmb.Text, out length))
Length = length,
如果您手动填充组合框。像这样
cmb.Items.Add(14);
cmb.Items.Add(17);
cmb.Items.Add(21);
然后您可以使用属性.Text
和.SelectedItem
答案 1 :(得分:0)
使用SelectedValue
代替SelectedIndex
:
Length = Convert.ToInt32(cboLength.SelectedValue);
由于SelectedValue
可能包含任何数据类型,因此它是object
。您需要将其强制转换回存储在那里的数据类型,在这种情况下为int
。
答案 2 :(得分:0)
我通常使用.SelectedIndex从items集合中获取文本对象,并获取.Text值并解析它。
int.Parse(cboLength.Item[cboLength.SelectedIndex].Text);