4

私はc#にまったく慣れていません。最初にやりたいことは、Key の Combination Eventsを試してその環境に慣れることです。特に、alt+k . 私はMicrosoft Visual c# 2010 Expressに取り組んでいます。そのコードが機能するかどうかをテストしたい。エラーが見つかった場合は、私に通知してください:)

public void begin(object sender, KeyEventArgs ev)
{
    if (ev.KeyCode == Keys.K && ev.Modifiers == Keys.Alt)
    {
        //display a message
    }
}

しかし、新しいプロジェクトをクリックしたときに提案されるプロジェクトのさまざまなモデルとその用途を理論的に知っていても、そのコードをテストするためにいくつかのモデルを試してみましたが失敗しました。要するに、どのモデルを選択すればよいのか、そのような単純なコードをテストするためのコードをどこに配置すればよいのか、より正確には最小限の GUIでイベント (キー + マウス)を操作するのかわかりません。誰かが具体的にC#でイベントを始める方法を教えてくれませんか?よろしくお願いします:)

4

2 に答える 2

2

MSDN ドキュメントには、何をする必要があるかの良い例があります。ここにいくつかの重要な部分があります:

  • 簡単な「Windows フォーム」アプリケーションから始めます。他にも多くの種類のアプリケーションがありますが、WinForms は最も簡単に始めることができます。
  • KeyPress イベントを接続します。 Form コンストラクターでは、KeyPress イベントを受け取ったときに何をすべきかを伝える必要があります。begin上記の質問の関数の名前をForm1_KeyPress(関数の機能をより正確に説明するために) に変更すると、次のコードが機能するはずです。

    this.KeyPress += new KeyPressEventHandler(Form1_KeyPress);

  • KeyPressEventArgsの代わりに使用しKeyEventArgsます。EventArgs大きな違いが生じる場合とそうでない場合がありますが、特定のプロパティを使用できるように、可能な場合 は最も具体的なものを使用することをお勧めします。

  • に注意してKeyPressEventArgs.Handledください。 ボタンやテキスト ボックスなど、フォーム上の他のオブジェクトに KeyPress (またはその他のキーボード イベント) がある場合は、イベントがそこで処理されたかどうか、または親にバブルアップする必要があるかどうかを示す必要があります (この場合は、フォーム)。

編集(@RBarryYoungに感謝):

  • this.KeyPreview = trueフォーム コンストラクターで設定します。上のヒントで述べたように、フォームが子コントロール (ボタンやテキスト ボックスなど) で発生するキーボード イベントを受け取るには、このプロパティを に設定しtrueて、フォームがキーボードを最初に確認できるようにする必要があります。子供に起こる出来事。(注: もちろん、このヒントと前のヒントは、フォームにこれらのイベントを表示させたい場合にのみ適用されます。場合によっては、キーボード ショートカットを親で処理するのではなく、子コントロールでトラップしたい場合があります。)
于 2013-05-01T20:42:24.347 に答える
0

それはあなたを助けることができます:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.K && this.AcceptButton == null)
    {
        MessageBox.Show("Key K pressed");
    }

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

フォームの任意のコントロールでキー K が押されたかどうかを検出し、msgbox を返します。

それをテストして、思い通りに動作するようにしてください。

于 2013-05-01T20:40:48.330 に答える