2013-11-14 41 views
0

我在我的项目中使用了一个名为QTextBox的组件Qios DevSuite实现文本框快捷键

什么默认情况下在.NET TextBox发生,当用户按下控制 + Backspace键它同时打字而不是删除从光标离开了字,字符“类似的”插入代替。

要解决这个问题,我想我会做这样的事情

public class QTextBoxEx : QTextBox 
{ 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == (Keys.Control | Keys.Back)) 
     { 
      // here goes my word removal code 
      return true; 
     } 

     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

这是一个很好的方法还是有已经建成的系统来实施这种行为的.NET?另外,从搜索字符串中删除最后一个单词的“最干净”的方式是什么? (我现在就可以考虑和与string.replace的正则表达式)

+0

是赢取表单的Qios? – NoChance

+0

是的,是的。我已经添加了标签winforms。 – Joel

回答

2
public class QTextBoxEx : QTextBox 
{ 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     // shortcut to search bar 
     if (keyData == (Keys.Control | Keys.Back)) 
     { 
      // 1st scenario: some text is already selected. 
      // In this case, delete only selected text. 
      if (SelectedText != "") 
      { 
       int selStart = SelectionStart; 
       Text = Text.Substring(0, selStart) + 
        Text.Substring(selStart + SelectedText.Length); 

       SelectionStart = selStart; 
       return true; 
      } 

      // 2nd scenario: delete word. 
      // 2 steps - delete "junk" and delete word. 

      // a) delete "junk" - non text/number characters until 
      // one letter/number is found 
      for (int i = this.SelectionStart - 1; i >= 0; i--) 
      { 
       if (char.IsLetterOrDigit(Text, i) == false) 
       { 
        Text = Text.Remove(i, 1); 
        SelectionStart = i; 
       } 
       else 
       { 
        break; 
       } 
      } 

      // delete word 
      for (int i = this.SelectionStart - 1; i >= 0; i--) 
      { 
       if (char.IsLetterOrDigit(Text, i)) 
       { 
        Text = Text.Remove(i, 1); 
        SelectionStart = i; 
       } 
       else 
       { 
        break; 
       } 
      } 
      return true; 
     } 

     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

此代码假定两种不同的情况:

  • 文本已选择:仅删除选定的文本。
  • 没有选定的文本:单词被删除。