3

押されているキーで入力が行われない場合に、メソッドに進む方法はありますか?つまり、Shiftキー、Controlキーなど、すべてを指定する必要はありません。理想的には、キーの組み合わせを検出するには、たとえばControl + V=Pasteです。

以下のようなコードは私が扱っているものです。

    if( (e.KeyData == Keys.Left) 
        || (e.KeyData == Keys.Right) 
        || (e.KeyData == Keys.Home) 
        || (e.KeyData == Keys.End) 
        || (e.KeyData == Keys.Up) 
        || (e.KeyData == Keys.Down)
        || (e.KeyData == Keys.ShiftKey)
        || (e.KeyData == Keys.ControlKey)
        ) return;

ただし、キー押下のすべての組み合わせを追加したくはありません。

何か案は?

4

4 に答える 4

4
protected override bool ProcessCmdKey( ref Message msg, Keys keyData )
{
  if ( keyData == (Keys.Control | Keys.V) )
    return true;
  else
    return base.ProcessCmdKey( ref msg, keyData );
}

これにより、コピーと貼り付けが処理されます。OnKeyPress をオーバーライドして、必要に応じて Char.IsDigit や Char.IsLetter (または Char.IsLetterOrDigit) を使用することもできます。他の人が示唆しているように、ここでは正規表現が保証されているとは思いません。

于 2010-11-16T04:28:04.980 に答える
2

Keys 値には、押されたすべてのキーのビットの組み合わせが含まれています。これは、一度に複数の値を持つことができることを意味します。これを試して:

if ( (keyData & Keys.Control) == Keys.Control && (keyData & Keys.V) == Keys.V) 
{ 
// Ctrl+V was pressed! 
} 

それで、それはキーの組み合わせを検出します...しかし、それらを指定する必要があります:s

これをチェックしてください: http://www.go4expert.com/forums/showthread.php?t=713

于 2010-11-16T04:23:05.013 に答える
0

これは、「押されているキーが入力されない場合はメソッドに進む」という質問の逆に答えますが、メソッドではなく、実際に達成しようとしていることに到達する可能性があります。

TextBox/RichTextBox コントロールで TextChanged イベント ハンドラを使用することをお勧めします。これは、テキストが実際に変更された場合にのみ発生します(ユーザーの入力によるものか、コードによるものか)。

private void richTextBox1_TextChanged(object sender, EventArgs e) {
    // Handle the event.
}

ユーザーがいつコンテンツを変更したかを知りたい場合Modifiedは、テキスト ボックスのプロパティを使用できます。

if (richTextBox1.Modified) {
    // The user modified the contents of the text box.
}

これは、KeyDown、KeyUp、KeyPress などのイベントを処理して、押されたキーからテキストが変更されたかどうかを判断するよりも、はるかに信頼性が高くなります。

于 2011-04-29T14:26:29.417 に答える
-1

おそらく、印刷できない文字を示す「文字クラス」で正規表現を使用することが目的に役立つでしょう。

たとえば、制御文字のユニコード「一般カテゴリ」は機能する可能性があります (「Cc」)。

于 2010-11-16T04:16:53.313 に答える