2012-01-17 7 views
2

사용자가 텍스트 영역에 정수 값을 입력 할 수 있지만 드롭 다운 목록에 여러 개의 "기본값"값이 포함되도록하고 싶습니다. 예를 들어, 드롭 다운 목록에있는 항목은 다음과 같이 포맷 할 것입니다 :콤보 상자에서 항목을 선택하고 콤보 상자 텍스트를 다른 것으로 설정하십시오.

  • 기본 - 0
  • 값 1-1
  • 값을 2-2

을 I가 원하는 것은 사용자가 항목 (예 : "Default - 0")을 선택하면 ComboBox 텍스트는 "Default - 0"이 아닌 "0"숫자 만 표시합니다. "기본값"이란 단어는 단지 정보 용 텍스트입니다.

나는 다음과 같은 이벤트와 함께 연주 한 : SelectedIndexChanged, SelectedValueChangedSelectionChangeCommitted,하지만 난 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.DisplayMember을 설정하고 여전히 ComboBox_SelectedIndexChanged()에서 개체에 대한 참조를 얻을 수 있습니다

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의 저장 및 복원을 추가하기 위해 코드를 편집했습니다) –

관련 문제