ComboBox - 如何将comboBox中的项值传递给我的属性?

时间:2014-11-05 03:04:17

标签: c# combobox

我有一个属性:

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;

3 个答案:

答案 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);