簡體   English   中英

如何檢測(Shift + Delete)鍵按下?

[英]how to detect the (Shift+Delete) key press?

我正在用C#winform制作自定義終端。 當用戶在我正在使用的TextBox按下一個鍵時,必須確保它是一個有效的鍵。 我需要阻止他們刪除東西並做他們想做的事。 我設法通過KeyPressKeyDown事件來處理退格鍵,刪除鍵和其他鍵。 用戶按下shift + Delete時遇到問題。 就像退格鍵一樣刪除東西。 我不知道它是什么整數。 我制作了一個C ++程序來檢測它,這很簡單:

char c = _getch();
cout << (int)c << endl;

我得到-32。 它在C#中不起作用。

經過無數次嘗試圈住它的值之后,我發現它為0。它至少在昨天有效,但現在不起作用了。 我也可以使用shift + delete刪除內容。

這是我的主要驗證方法:

private bool IsInvalidKey(char key)
{
  bool condition1 = !IsAsciiKey(key) && !IsNavigatingKey(key); // by navigation I mean: left, right, end and home keys.
  bool condition2 = (GetCaretPosition() == CaretPosition.OutsideCommandLine && !IsNavigatingKey(key));
  bool condition3 = ((key == (char)Keys.Back) && GetCaretPosition() == CaretPosition.BeginningOfCommandLine);
  return (condition1 || condition2 || condition3);
}

private bool IsAsciiKey(char key)
{
  return ((int)key > 0 && (int)key <= 127); // char(0) should be shift+delete
}

如何檢測此鍵以及在何處(在哪種情況下,是KeyPressKeyDown ?)

我使用的是普通的TextBox控件,而不是RichTextBox

您真正需要做的是在TextChanged事件中進行所有驗證,而不是嘗試通過使用KeyDown事件查看每個單獨的鍵,並且您需要驗證每個條目的整個條目(而不僅僅是最后一個字符)時間什么都改變了。 這是支持用戶可能做的所有事情的唯一方法。 例如,用戶可以使用鼠標在文本框中剪切或粘貼文本,而這根本不會觸發任何按鍵事件。

如果需要,您也可以處理按鍵事件這樣就可以防止無效的字符/鍵首先更改文本(並引起完全驗證),但這基本上就像對客戶端上的字段執行客戶端驗證一樣。網頁; 這樣做很不錯,但是既然您可以解決它,那么就不能使用它。

您可以在KeyDown事件中嘗試類似的操作。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Shift && e.KeyCode == Keys.Delete) e.Handled = true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM