2016-07-26 92 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(); 
       } 
      } 
    } 

,您可以用按钮来执行此操作点击以及。同样的逻辑也将在那里工作