2014-11-05 72 views
0

我有一個屬性:組合框 - 如何將組合框中的項目的值傳遞給我的屬性?

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; 
     } 

在我的表單中我有我想通過這些INT對我length屬性值14,17,21的組合框。我怎麼做?我使用下面的代碼,但它將selectedindex 0,1,2傳遞給我的屬性,並引發MinLength的異常。我如何將14,17,21傳遞給Length?

Canoe c = new Canoe() 
      { 
       Brand = txtBrand.Text, 
       Model = txtModel.Text, 
       ModelYear = cboModelYear.SelectedIndex, 
       Length = cboLength.SelectedIndex, 
      }; 

      this.Tag = c; 
      this.DialogResult = DialogResult.OK; 

回答

0

使用SelectedValue而不是SelectedIndex

Length = Convert.ToInt32(cboLength.SelectedValue); 

由於SelectedValue可能包含任何數據類型,它是一個object。您需要將其恢復爲您存儲在其中的數據類型,在這種情況下爲int

+0

我試過了,但在當地人窗口顯示的值表示0不管我選擇了其中的價值。 – ScottT 2014-11-05 03:28:05

+0

您是否設置了「ComboBox」的「ValueMember」和「DisplayMember」?如果沒有,那麼你可以使用'cboLength.Text'並將其轉換爲'int'。 – 2014-11-05 03:29:33

+0

使用cboLength.Text像魅力一樣工作,謝謝。你能告訴我更多關於使用ValueMember和DisplayMember屬性的信息嗎?每一個都會發生什麼? – ScottT 2014-11-05 03:35:08

0

我通常使用.SelectedIndex從items集合中獲取文本對象,並獲取.Text值並解析它。

int.Parse(cboLength.Item[cboLength.SelectedIndex].Text); 
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

相關問題