2011-09-09 7 views
3

私はフォーム上にComboBoxを持っています。 ComboBoxのDropDownStyleプロパティはDropDownに設定されているため、ユーザーはドロップダウンリストから項目を選択するか、手動でテキストを入力できます。ドロップダウンリストから項目を選択したときにComboBoxのテキストフィールドを変更しますか?

ユーザーがドロップダウンリストからアイテムを選択すると、アイテムのテキストがComboBoxのテキストフィールドに表示される前に変更を加えたいと思います。これらのアイテムのいずれかが選択されている場合

101 Cat 
102 Dog 
103 Bird 

、私が唯一の説明が欲しい:非常に簡単な例を使用するには、そのようなものだが、ドロップダウンリストは、IDや説明で構成する項目が含まれているとしましょうコンボボックスのテキストフィールドに表示されます。したがって、 "102 Dog"を選択すると、テキストフィールドに文字列 "Dog"が表示され、ユーザーが編集できる状態になり、ドロップダウンリストの項目は変更されません。

ComboBoxのSelectionChangeCommittedイベントを聞いて、ComboBoxのTextプロパティを好きなものに設定できると思っていました。しかし、私がこれを行うと、Textに行った変更は無視され、文字列全体( "102 Dog")はComboBoxに表示されます。

したがって、Textがドロップダウンリストの項目ではないことをComboBoxに示すために、SelectedIndexフィールドを-1に更新する必要があると考えました。しかし、これは私がTextプロパティを何に変更しても、テキストフィールドを完全にクリアするだけです。

だから、私は私の目的のためにあまりにも早く起動するように表示されるSelectionChangedCommittedは、使用されるように間違ったイベントであることを考え出し(TextプロパティのみSelectionChangeCommittedイベント・ハンドラが完了した後に私の選択で更新しているようです) 。しかし、他のすべてのComboBoxイベントは、SelectedIndexChangedDropDownClosedを含む、動作しません。

私はこれが非常に習得しやすいと思った。これを行う簡単な方法があるはずですが、私は何か明白な何かを見逃していると確信しています...任意のアイデア?

答えて

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は「猫」のキー、102は「犬」のキーなどですか?もしそうなら、なぜあなたはそれらを表示しているだけでなく、各項目のテキストを表示しています(これはあなたの要件です、私の答えをお詫び申し上げます)。私が理解するところでは、コンボボックスのvaluememberを、101,102などを返すプロパティに設定し、displaymemberを各アイテムのテキストを返すプロパティに設定します。こうして、あなたはすでにあなたが望むもの、つまり「猫」、「犬」、「鳥」のテキストを表示できます。また、より処理が必要な場合は、コンボのTextChangedイベントにイベントをアタッチすることもできます。

+0

"101 Cat"、 "102 Dog"などをドロップダウンに表示したいのですが、項目がドロップダウンから選択された後、テキストボックスに "Cat"、 "Dog"などしか表示しません。はい、これは必須条件です。私は非常に単純な例として猫と犬を使用しましたが、ポイントは、ドロップダウンに表示される項目が、ユーザーが項目を選択した後にテキストボックスに表示されるものと異なることです。 – Justin

関連する問題