2013-11-14 82 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); 
    } 
} 

此代碼假定兩種不同的情況:

  • 文本已選擇:僅刪除選定的文本。
  • 沒有選定的文本:單詞被刪除。