PictureBoxはフォーカスを取得できません。イメージを表示する方法として意図されていますが、キーボードなどのユーザー入力を許可することは意図していません。
フォームのOnKeyDownイベントをインターセプトして、関心のあるキーをテストするのが賢明です。これは、Buttonなどのフォーカスを持つコントロールがそれらのキー自体を処理したくない限り機能します。
より良いアプローチは、フォームのProcessCmdKey()メソッドをオーバーライドすることです。このメソッドは、Buttonなどのターゲットコントロールで呼び出され、キーが特殊であるかどうかを判断します。 Buttonが特別なものとして認識しない場合は、親コントロールを呼び出します。このように、フォームのレベルメソッドは、実際のターゲットの特殊キーではない各キーの押下ごとに呼び出されます。これにより、ボタンはまだボタンを押すために使用されるENTERキーを処理することができますが、他のキーはフォームによって処理されます。
最後に、フォームのいずれかのコントロールで処理される前にすべてのキーを傍受するには、IMessageFilterインターフェイスを実装する必要があります。このようなもの...
public partial class MyWindow : Form, IMessageFilter
{
public MyWindow()
{
InitializeComponent();
Application.AddMessageFilter(this);
}
public bool PreFilterMessage(ref Message m)
{
// WM_KEYDOWN
if (m.Msg == 0x0100)
{
// Extract the keys being pressed
Keys keys = ((Keys)((int)m.WParam.ToInt64()));
// Test for the A key....
if (keys == Keys.A)
{
return true; // Prevent message reaching destination
}
}
}
return false;
}
このWinFormsはありますか? – ChrisF
はいです。私はそれを書くのを忘れた。 – Antmoritz