2

Ctrl + C、Ctrl + Zなど、入力できない特定のキーの組み合わせ(エスケープシーケンス)のキープレスを検出することにより、C#でシリアル通信のハイパーターミナル機能をエミュレートしようとしています。これらのキーにはASCIIがあることを理解しています同等であり、そのように送信できます。しかし、複数のキー押下の検出に関する問題に直面しています。私のコードの一部は参照として提供されています:

private void Transmitted_KeyDown(object sender, KeyEventArgs e)
{


   if (e.Modifiers == Keys.Control || e.Modifiers== Keys.Shift || e.Modifiers==Keys.Alt)
   {
       var test = (char)e.KeyValue; // Only able to detect a single keypress!


       ComPort.Write(test.ToString());

   }
} 
4

3 に答える 3

6

通常のキーを探している場合は、それらをリストに保存できます。KeyDown で、キーをリストに追加します。Key Up で、リストから削除します。KeyDown で、リストの内容を確認します。

ただし、ctrl、shift、alt などの修飾キーのキーダウン/キーアップ イベントがあるかどうかはわかりません。これらの場合、次のようなことができます:

bool CtrlDown = ((e.Modifiers & Keys.Control) > 0);
bool CtrlOnlyModifierDown = ((e.ModifierKeys & Keys.Control) == Keys.Control) 
于 2009-10-09T15:38:11.887 に答える
2

e.KeyCodeキー値 + 修飾子情報を含む

e.KeyCode = e.KeyValue | e.Modifiers

使用するe.KeyCode

于 2009-10-09T15:43:34.513 に答える
0

運が良かったかどうかはわかりません。

しかし、このコードを試してください:

        switch (e.KeyData)
        {
            case Keys.Control:
                {
                    if (e.KeyData == Keys.Subtract) 
                    { }
                    else if (e.KeyData == Keys.C) 
                    { }
                    break;
                }
        }
于 2012-08-22T06:57:15.787 に答える