2016-08-25 5 views
0

Long Story Short:ポップ、ロック、メタルのような特定のタグがあり、ユーザーがテキストボックスに書き込む必要があります。 )が一致します。現時点では私は次のコードでコンボボックスを使用しています:これは正常に動作しているが、問題がある一致する場合は、チェックボックスをオンにしてください

private void EnterComboBox_TextChanged(object sender, EventArgs e) 
    { 
     List<string> AllTags = new List<string>(); 

     AllTags.Add("Pop"); 

     if (AlleTags[0].ToLower().StartsWith(EnterComboBox.Text.ToLower())) 
     { 
      EnterComboBox.Items.Clear(); 
      EnterComboBox.Items.Add("Pop"); 
      EnterComboBox.DroppedDown = true; 
     } 
    } 

、それは最初の文字の後のDropboxがダウンして低下し、入力したテキストがマークされ、上書きされます入力されました新しい文字が入力されたとき。どのように私はこれを修正することができる任意のアイデア?すべてのアイデアは、それがコンボボックスである必要はありません:)!

編集: もう少し詳細な調査をしたところ、私はこのように説明することができたことを実感しました。基本的には、コンボボックスはGoogleの検索バーのように動作します。ユーザーは文字を入力し、ドロップダウンメニューにはオートコンプリート提案があります

現時点では、私はこのように解決しました: コンボボックスの矢印だけが表示されるようにテキストボックスをコンボボックスの前に置きました。あなたは自動的にテキストボックスに書き込みます。

public Form1() 
    { 
     InitializeComponent(); 
     EingabeTextBox.AutoSize = false; 
     EingabeTextBox.Size = new Size(243, 21);  //the size of the combobox is 260;21 
    } 

    private void EingabeTextBox_TextChanged(object sender, EventArgs e) 
    { 
     EingabeComboBox.Items.Clear(); 

     List<string> AlleTags = new List<string>(); 

     AlleTags.Add("Example"); 

     if (AlleTags[0].ToLower().StartsWith(EingabeTextBox.Text.ToLower())) 
     { 
      EingabeComboBox.Items.Add(AlleTags[0]); 
      EingabeComboBox.DroppedDown = true; 
     } 
    } 

私にとっては、このように動作します。私はこれも他の誰かを助けることができることを願っていますが、私はまだ良いアイデアのために開いています:)!

+0

テキストボックスにテキストを入力していないかのように見えますが、ComboBox自体にあります。 –

+0

Comboboxのテキストが有効になっているときにそれを選択解除してください。 編集カーソルを最後まで押してください。 入力されたテキストがなくなったら、それを変数に保存してもう一度取得することができます。 – Abdo

+0

@ OlivierJacot-Descombesはい現在、私はコンボボックス自体に入力を書いていますが、私はどんな提案にも公開しています – Shmosi

答えて

1

入力時にComboBoxエントリを変更すると、明らかに望ましくない干渉が発生します。代わりにTextBoxとListBoxを組み合わせます。

private bool changing; 

private void TextBox_TextChanged(object sender, EventArgs e) 
{ 
    if (!changing) { 
     changing = true; 
     try { 
      // manipulate entries in the ListBox 
     } finally { 
      changing = false; 
     } 
    } 
} 

private void ListBox_IndexChanged(object sender, EventArgs e) 
{ 
    if (!changing) { 
     changing = true; 
     try { 
      // Put selected entry into TextBox 
     } finally { 
      changing = false; 
     } 
    } 
} 

changingガードを使用すると、テキストボックスにテキストを入力し、その逆もされている間、リストボックスはテキストボックスに影響を与えないことを確認します。

try-finallyは、例外が発生した場合でも、いかなる状況においてもガードがリセットされることを保証します。

関連する問題