2016-07-26 19 views
0

私はユーザーが文字列を入力するテキストボックスを持っています。今、主な文字列から部分文字列を抽出し、それをリストボックスに表示します。テキストボックスからリストボックスに部分文字列を追加する

例: ユーザーが次のように入力した場合:SELECT A1、A2、A3 FROM TABLE1 次に、リストボックスの別々の項目としてA1、A2およびA3が必要です。

私はそれを簡単に行うことができますが、発生する小さな問題があります。

"FROM"という単語の入力が終了すると、値がリストボックスに追加され、ユーザーが "FROM"(空白も含む)の後に何かを入力すると、値が再び追加されます。

値は1回だけ必要です。私は何が欠けていますか?ユーザーが入力したときTextBoxから書かれたまたは削除されているすべての文字に

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 

     string substr; 
     string str = textBox1.Text.ToString(); 
     Match m = Regex.Match(str, @"(?<=.\s+).+?(?=\s+from)", RegexOptions.IgnoreCase); 
     try 
     { 
      if (m.Success) 
      { 
       substr = m.Value; 
       string[] sub = substr.Split(','); 
       foreach (string x in sub) 
       { 
        listBox1.Items.Add(x); 
       } 
      } 
     finally 
     { 
      listBox1.EndUpdate(); 
     } 

    } 

答えて

2

textBox1_TextChanged火を助けてください。以下のような頻繁なイベントに何とか重いロジックを実行し、

listBox1.Items.Clear(); 

私は本当にあなたが別のアプローチで行くことを示唆している:あなたはListBoxあなたがこのアクション(あなたの上記の方法の非常に最初のアクションを)やりたいたびにクリアすることができますTextChangedはあまり良いアイデアではありません。おそらくリストが必要で、結果を比較して新しいものだけを追加するたびに必要です。または、ボタンのクリックでこのロジックを実行したり、テキストボックスのフォーカスを失ったりすることがあります。

パフォーマンスが低下しない限り、今やっていることをやり続けることができます。

+0

うん、うまくいきました。どうもありがとう。 :) –

0

あなたがテキストボックスにプレスイベントを入力するには、この操作を行うことができますので、ユーザは、最初に彼/彼女がボタンをEnterキーを押すと、操作が

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
      if (e.KeyCode == Keys.Enter) 
      { 
       string substr; 
       string str = textBox1.Text.ToString(); 
       Match m = Regex.Match(str, @"(?<=.\s+).+?(?=\s+from)", RegexOptions.IgnoreCase); 
       try 
       { 
        if (m.Success) 
        { 
         substr = m.Value; 
         string[] sub = substr.Split(','); 
         foreach (string x in sub) 
         { 
          listBox1.Items.Add(x); 
         } 
        } 
       } 
       finally 
       { 
        listBox1.EndUpdate(); 
       } 
      } 
    } 

を実行し、ボタンを使用してこの操作を行うことができ、その後全体のテキストを挿入クリックしてください。同じロジックもそこで動作します

関連する問題