DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PictureBox でキー入力ハンドリング

環境/言語:[.NET Framework3.5 & C#2008]
分類:[.NET]

お世話になります。

pictureBox をフォームの全面(フォームと同じサイズの)に貼り付けて、イメージを貼り付けて、画像を動的に描画したりさせていますが、その際のキー入力のハンドリングの仕方を教えてください。
フォーム自身がpictureBoxの下敷きになってしまっているので、フォームでキーイベント処理を用意してもイベントをハンドリングできませんでした。
マウス関係のイベント関数は用意されているようなのですが、pictureBox にはイベントがないようなので、何か妙案がないものか・・・。

どなたか解決策が判れば宜しくお願いします。
多分こちらの記事が参考になると思います。

KeyPressなどのキーイベントをすべてフォームが受け取るようにする
http://dobon.net/vb/dotnet/form/keypreview.html
さっそく有難う御座いました。

さっそく、フォームに対して、

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
this.KeyPreview = true;
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

と定義してみたのですが、

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
エラー 6 '######.*****' に 'KeyPreview' の定義が含まれておらず、型 'Grid_Cell.GRID_CELL' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

・・・とエラーとなってしまいました。
なにぶん勉強中なのでどういう事か判らないのですが、
参考にしていただいた過去記事には、

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
補足:.NET Framework 2.0から追加されたPreviewKeyDownイベントは、フォームのKeyPreviewプロパティをTrueにしてもフォームで受け取ることはできません。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

とも記載されているのですが、実は使えなかったりはしませんよね???

大変申し訳ありませんが、ヒントを下さい。
this.KeyPreview = true;

を記述した場所が正しくない可能性がありますので、コードを書くのではなく、フォームデザイナを使ってKeyPreviewプロパティの値を変更してみてください。
お忙しいところ、いつも申し訳ありません。
フォームデザイナのプロパティでも見つけられなかったので、例を見て直接コードで書いてみたんですよ。
C#2008 では無理なのかなぁ・・・・・・・。

或いは普段は何かの設定で、その設定項目は隠してあって、私が見れていないだけなのかもしれませんけど・・・。

※コマンドボタンにも絵やイメージが描けるので、最悪はボタンを広大なキャンバスに見立てて、そちらで絵やイメージを描こうかな・・・とも思い始めています。 →もともとボタンだからキーイベントはもれなくついてくるし♪
keiさん

> フォームデザイナのプロパティでも見つけられなかったので、例を見て直接コードで書いてみたんですよ。
> C#2008 では無理なのかなぁ・・・・・・・。
>
Windowsアプリですよね。
C#2008でも
フォームのプロパティにKeyPreviewはありますよ。

どうしてもの場合は、Formのコンストラクタにて、his.KeyPreview = true;
するといいと思います。
ありがとうございます。

で、今、重大な事に気が付きました・・・。
実はフォームコントロールライブラリのDLLを作ってました。
重要情報でした・・・。

これを普通のWinアプリのフォームデザインでレイアウトして使う予定だったんですよ。

確かに、Winアプリのフォームを見たら、KeyPreview プロパティはありました。
ですが・・・フォームコントロールライブラリにはやはり無いなぁ・・・。
KeyPreview を True にすれば、フォームコントロールライブラリにフォーカスが当たっていても、アプリ側でキーがハンドリングできるのかな?
試してみます。


>>フォームデザイナのプロパティでも見つけられなかったので、例を見て直接コードで書いてみたんですよ。
>>C#2008 では無理なのかなぁ・・・・・・・。
>>
> Windowsアプリですよね。
> C#2008でも
> フォームのプロパティにKeyPreviewはありますよ。
>
> どうしてもの場合は、Formのコンストラクタにて、his.KeyPreview = true;
> するといいと思います。

DOBON.NET | プログラミング道 | プログラミング掲示板