2011-09-09 2 views
3

폼에 ComboBox가 있습니다. ComboBox의 DropDownStyle 속성은 DropDown으로 설정되어 있으므로 사용자는 드롭 다운 목록에서 항목을 선택하거나 수동으로 텍스트를 입력 할 수 있습니다.드롭 다운 목록에서 항목을 선택하면 ComboBox의 텍스트 필드가 변경됩니까?

사용자가 드롭 다운 목록에서 항목을 선택하면 ComboBox의 텍스트 필드에 나타나기 전에 해당 항목의 텍스트를 일부 변경하려고합니다. 이러한 항목 중 하나를 선택하면

101 Cat 
102 Dog 
103 Bird 

, 나는 만 설명을하고 싶습니다 : 매우 간단한 예제를 사용하려면,의 드롭 다운 목록은 ID와 설명으로 구성 때문에 같은 항목이 포함되어 가정 해 봅시다 ComboBox의 텍스트 필드에 나타납니다. 따라서 "102 Dog"를 선택하면 텍스트 필드에 "Dog"문자열이 표시되어 사용자가 편집 할 수 있도록 준비되어야하며 드롭 다운 목록의 항목은 변경되지 않아야합니다.

ComboBox의 SelectionChangeCommitted 이벤트를 듣고 ComboBox의 Text 속성을 원하는대로 설정할 수 있다고 생각했습니다. 하지만 이렇게하면 Text에 대한 변경 사항이 무시되고 전체 문자열 ("102 Dog")은 계속 ComboBox에 표시됩니다.

그렇다면 Text이 드롭 다운 목록의 항목이 아니라는 것을 ComboBox에 알리기 위해 SelectedIndex 필드를 -1로 업데이트해야한다고 생각했습니다. 그러나 이것은 내가 Text 속성을 변경 한 것과 관계없이 텍스트 필드를 완전히 지 웁니다.

그래서 나는 너무 빨리 내 목적으로합니다 (Text 재산 만 SelectionChangeCommitted 이벤트 핸들러가 완료 후 내 선택 업데이트 할 것)에 대한 해고 나타나는 SelectionChangedCommitted가 사용되는 잘못된 이벤트라고 생각 . 그러나 SelectedIndexChangedDropDownClosed을 포함하여 다른 모든 ComboBox 이벤트도 작동하지 않습니다.

나는 이것이 매우 습관적이라고 생각했다. 이 작업을 수행 할 수있는 간단한 방법이 있어야하며 확실한 뭔가를 놓치고 있다고 확신합니다 ... 어떤 아이디어입니까?

답변

3

이 작업을 시도 할 수 있습니다 :

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (comboBox1.SelectedIndex > -1) 
    { 
    string value = comboBox1.Items[comboBox1.SelectedIndex].ToString().Substring(4); 
    this.BeginInvoke((MethodInvoker)delegate { this.comboBox1.Text = value; }); 
    } 
} 
+0

BeginInvoke! 당연하지. 좋은 소식은이 작품입니다, 나쁜 소식은 지금 나는 바보처럼 느껴집니다. ;) 고맙습니다. – Justin

0

선택하면 그냥 당신이 사용자가 콤보 드롭 다운 때 등 "101 고양이", "102 개", displaing하고이를 표시하는 명확히하기 위해? 101은 "Cat"의 열쇠이고, 102는 "Dog"의 열쇠입니까? 그렇다면 왜 각 항목의 텍스트를 표시 할뿐만 아니라 표시하고 있습니까? (귀하의 요구 사항 인 경우 제 답변을 사과합니다). 내가 이해할 수 있도록 101, 102 등을 반환하는 속성에 콤보 박스 valuemember를 구성하고 각 항목의 텍스트를 반환하는 속성에 displaymember를 구성합니다. 이렇게하면 이미 원하는 것을 얻을 수 있습니다. 즉, "고양이", "개"및 "새"텍스트를 표시합니다. 또한 처리 속도를 높이려면 콤보의 TextChanged 이벤트에 이벤트를 첨부 할 수 있습니다.

+0

"101 Cat", "102 Dog"등을 드롭 다운에 표시하고 싶지만 드롭 다운에서 항목을 선택한 후에 텍스트 상자에 "Cat", "Dog"등만 표시하고 싶습니다. 예, 이것은 필수 사항입니다. 아주 간단한 예로서 고양이와 개를 사용했지만 요점은 드롭 다운에 표시된 항목이 사용자가 항목을 선택한 후에 텍스트 상자에 표시되는 항목과 다르다는 점입니다. – Justin

관련 문제