2016-07-26 93 views
0

我有一個文本框,用戶在其中輸入一些字符串。現在,我從主字符串中提取一個子字符串並將其顯示到一個列表框中。從文本框添加子串到列表框

例如: 如果用戶輸入:SELECT A1,A2,A3 FROM TABLE1 然後我需要A1,A2和A3作爲我的列表框的單獨項目。

我可以很容易地做到這一點,但是有一個小問題正在發生。

只要用戶輸入單詞「FROM」,值就會被添加到列表框中,並且如果用戶在「FROM」(甚至空格)之後鍵入任何內容,則會再次添加值。

我只需要這些值一次。我錯過了什麼?請幫助每個字符

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時觸發用戶鍵入寫入或刪除從TextBox。您可以清除ListBox你想要做這個動作(你以上的方法的第一個動作)每次:

listBox1.Items.Clear(); 

我真的建議你去用另一種方法,頻繁的事件,如執行莫名其妙重邏輯TextChanged不是一個好主意。可能你需要一個列表,每次你比較結果並添加新的結果。或者,您可以在點擊按鈕或文本框失去焦點時執行此邏輯。

無論如何,除非你經歷了糟糕的表現,否則你可以繼續做你現在正在做的事情。

+0

是的,它的工作。非常感謝。 :) –

0

您可以執行此操作在文本框中輸入的新聞發佈會上,使用戶第一次插入整個文本,然後如果他/她按下回車鍵,然後操作將執行

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(); 
       } 
      } 
    } 

,您可以用按鈕來執行此操作點擊以及。同樣的邏輯也將在那裏工作