- - PR -
C#でのキー入力について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-03 01:45
いつもお世話になっております。
C#のキー入力についての質問です。 やろうとしていることは、例えば PictureBox に Draw〜を使って図形を複数個描き (円でも四角でも何でもいいです) マウスのクリックで図形を選択→DELキーで消去 というようなことです。 消去といっても実際は書かないようにするってだけですが… この時に、マウス座標から図形のRectをチェックして選択 ぐらいまでは 問題ないのですが、DELキーが押された時の処理をどこに記述すればいいのか わかりません。 押されたキーがDELキーなら〜 みたいなコードはどこにどのように 書けばいいのでしょうか? あと、あるキーを押しつつ、PictureBox 上でマウスをクリックしながら移動したら みたいな処理も行いたいのですが、この「あるキー」が Ctrl などの 修飾キーならControl.ModifierKeys で判断できるのですが、これが 「スペースキー」を押しながら、となるとこれまたどうやって キーを判断すればいいのかわかりません。 質問が2つになってしまって申し訳ありませんが お分かりになる方、ご教授よろしくお願い致します。 | ||||||||
|
投稿日時: 2005-08-03 07:09
KeyUpイベントが一般的かと。KeyDownイベントやKeyPressイベントでも場合によってはかまわない。
KeyDownイベントとKeyUpイベントを使ってフラグを立てて処理する。KeyDownイベントでスペースキーならフラグを立てる、KeyUpイベントでスペースキーならフラグをクリア。 あるいはGetKeyboardState APIを用いてキーボードの状態を取得する。 [ メッセージ編集済み 編集者: 甕星 編集日時 2005-08-03 07:14 ] | ||||||||
|
投稿日時: 2005-08-03 11:24
レスありがとうございます。
色々試してみたのですが、 KeyPress イベントは、KeyPreview = Treu にして、フォーム側で 受け取るということでしょうか?( PictureBox には Key〜のイベントが無いようなので) ただこの場合、他のコントロール(TextBox等)にもKey〜系のイベントを設定してあるので そちらとどう区別しようかという問題も出てきます。 あと、DELキーでは KeyPress イベントは呼ばれませんでした… こちらもどうすればよろしいのでしょうか? 宜しくお願い致します。 | ||||||||
|
投稿日時: 2005-08-03 18:15
Key〜のイベントあるけど・・ PictureBoxはForms.Controlの派生クラスです。したがってForms.Controlのメンバは全て利用出来るはずです。ただしプロテクトイベントなんでPictureBoxを継承した独自のクラスを定義する必要があるだろうけどね。 #とりあえずオブジェクト指向の基本的な知識は身につけようぜ! _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ [ メッセージ編集済み 編集者: 甕星 編集日時 2005-08-03 18:16 ] | ||||||||
|
投稿日時: 2005-08-03 18:50
>>甕星さん
たぶんですが、デザイナで表示されないって意味かと。 これは簡単な話でSelectableではないコントロールはKey〜系のイベントはBrowsable(false)にしてるだけです。いらないですし、もともとSelectableでないコントロールはキー入力は受け取りませんからね。 えーと、本題ですが、そのPictureBox内のオブジェクトを選択させるのならば、フォーカスが当たってないかぎりDelを押したときにその対象についてDeleteするという風にユーザーは識別できません。Control.SetStyle(ControlStyles.Selectable, true)をしたり、フォーカスが当たっているかどうかによって表示も切り替えるべきです。 | ||||||||
|
投稿日時: 2005-08-04 00:51
yaさんのおっしゃるとおり、デザイナ上では確認できなかった
という意味です。お恥ずかしい… 何はともあれ、PictureBox から派生したカスタムコントロールを 作るとこから始めろよってとこですかね? |
1