2012-01-17 13 views
2

ComboBox私は、テキスト領域に整数値を入力できますが、ドロップダウンリストにはいくつかの "デフォルト値"が含まれています。たとえば、ドロップダウンリストの項目は次のようにフォーマットされます:コンボボックス内の項目を選択し、コンボボックスのテキストを別のものに設定しますか?

  • デフォルト - 0
  • 値1から1
  • 値2から2

私が欲しいものですユーザーが項目(「Default-0」など)を選択すると、ComboBoxのテキストには、「Default-0」ではなく「0」の数字だけが表示されます。 「デフォルト」という言葉は単なる情報テキストです。

私は以下のイベントを果たしている:SelectedIndexChangedSelectedValueChanged、およびSelectionChangeCommittedが、私はComboBoxのテキストを変更することができませんでした。

private void ModificationCombobox_SelectionChangeCommitted(object sender, EventArgs e) 
{ 
    ComboBox comboBox = (ComboBox)sender; // That cast must not fail. 
    if (comboBox.SelectedIndex != -1) 
    { 
     comboBox.Text = this.values[comboBox.SelectedItem.ToString()].ToString(); // Text is not updated after... 
    } 
} 

答えて

2

その後、List<ComboBoxItem>を作成し、Combobox.DataSourceとしてそれを使用し、あなたのComboBox項目のクラスを定義することができます。これであなたが表示したいとまだComboBox_SelectedIndexChanged()からあなたのオブジェクトへの参照を取得するプロパティにComboBox.DisplayMemberを設定することができます。

class ComboboxItem 
{ 
    public int Value { get; set; } 
    public string Description { get; set; } 
} 

public partial class Form1 : Form 
{ 
    List<ComboboxItem> ComboBoxItems = new List<ComboboxItem>(); 
    public Form1() 
    { 
    InitializeComponent(); 
    ComboBoxItems.Add(new ComboboxItem() { Description = "Default = 0", Value = 0 }); 
    ComboBoxItems.Add(new ComboboxItem() { Description = "Value 1 = 1", Value = 1 }); 
    ComboBoxItems.Add(new ComboboxItem() { Description = "Value 2 = 2", Value = 2 }); 
    comboBox1.DataSource = ComboBoxItems; 
    comboBox1.DisplayMember = "Value"; 

    } 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
    var item = (ComboboxItem)((ComboBox)sender).SelectedItem; 
    var test = string.Format("Description is \'{0}\', Value is \'{1}\'", item.Description, item.Value.ToString()); 
    MessageBox.Show(test); 
    } 
} 

[編集] をドロップダウン状態の間のボックスtooglesがこれをしようとすると表示されるテキストを変更する場合:(これはコンセプトですが、どういうふうに振る舞うかわかりません)

private void comboBox1_DropDown(object sender, EventArgs e) 
    { 
     comboBox1.DisplayMember = "Description"; 
    } 

    private void comboBox1_DropDownClosed(object sender, EventArgs e) 
    { 
     comboBox1.DisplayMember = "Value"; 
    } 
+0

ありがとうございました。 (私はあなたのコードを編集して、変更を保存するためにselectedIndexの保存と復元を追加しました) –