- PR -

C#でのキー入力について

1
投稿者投稿内容
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2005-08-03 01:45
いつもお世話になっております。
C#のキー入力についての質問です。

やろうとしていることは、例えば PictureBox に Draw〜を使って図形を複数個描き
(円でも四角でも何でもいいです)
マウスのクリックで図形を選択→DELキーで消去 というようなことです。
消去といっても実際は書かないようにするってだけですが…

この時に、マウス座標から図形のRectをチェックして選択 ぐらいまでは
問題ないのですが、DELキーが押された時の処理をどこに記述すればいいのか
わかりません。
押されたキーがDELキーなら〜 みたいなコードはどこにどのように
書けばいいのでしょうか?

あと、あるキーを押しつつ、PictureBox 上でマウスをクリックしながら移動したら
みたいな処理も行いたいのですが、この「あるキー」が Ctrl などの
修飾キーならControl.ModifierKeys で判断できるのですが、これが
「スペースキー」を押しながら、となるとこれまたどうやって
キーを判断すればいいのかわかりません。

質問が2つになってしまって申し訳ありませんが
お分かりになる方、ご教授よろしくお願い致します。


甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-08-03 07:09
引用:

まかろにさんの書き込み (2005-08-03 01:45) より:
この時に、マウス座標から図形のRectをチェックして選択 ぐらいまでは
問題ないのですが、DELキーが押された時の処理をどこに記述すればいいのか
わかりません。
押されたキーがDELキーなら〜 みたいなコードはどこにどのように
書けばいいのでしょうか?


KeyUpイベントが一般的かと。KeyDownイベントやKeyPressイベントでも場合によってはかまわない。

引用:

あと、あるキーを押しつつ、PictureBox 上でマウスをクリックしながら移動したら
みたいな処理も行いたいのですが、この「あるキー」が Ctrl などの
修飾キーならControl.ModifierKeys で判断できるのですが、これが
「スペースキー」を押しながら、となるとこれまたどうやって
キーを判断すればいいのかわかりません。


KeyDownイベントとKeyUpイベントを使ってフラグを立てて処理する。KeyDownイベントでスペースキーならフラグを立てる、KeyUpイベントでスペースキーならフラグをクリア。

あるいはGetKeyboardState APIを用いてキーボードの状態を取得する。

[ メッセージ編集済み 編集者: 甕星 編集日時 2005-08-03 07:14 ]
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2005-08-03 11:24
レスありがとうございます。

色々試してみたのですが、
KeyPress イベントは、KeyPreview = Treu にして、フォーム側で
受け取るということでしょうか?( PictureBox には Key〜のイベントが無いようなので)

ただこの場合、他のコントロール(TextBox等)にもKey〜系のイベントを設定してあるので
そちらとどう区別しようかという問題も出てきます。
あと、DELキーでは KeyPress イベントは呼ばれませんでした…
こちらもどうすればよろしいのでしょうか?

宜しくお願い致します。

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-08-03 18:15
引用:

まかろにさんの書き込み (2005-08-03 11:24) より:
色々試してみたのですが、
KeyPress イベントは、KeyPreview = Treu にして、フォーム側で
受け取るということでしょうか?( PictureBox には Key〜のイベントが無いようなので)


Key〜のイベントあるけど・・

PictureBoxはForms.Controlの派生クラスです。したがってForms.Controlのメンバは全て利用出来るはずです。ただしプロテクトイベントなんでPictureBoxを継承した独自のクラスを定義する必要があるだろうけどね。

#とりあえずオブジェクト指向の基本的な知識は身につけようぜ!

_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/

[ メッセージ編集済み 編集者: 甕星 編集日時 2005-08-03 18:16 ]
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2005-08-03 18:50
>>甕星さん
たぶんですが、デザイナで表示されないって意味かと。
これは簡単な話でSelectableではないコントロールはKey〜系のイベントはBrowsable(false)にしてるだけです。いらないですし、もともとSelectableでないコントロールはキー入力は受け取りませんからね。

えーと、本題ですが、そのPictureBox内のオブジェクトを選択させるのならば、フォーカスが当たってないかぎりDelを押したときにその対象についてDeleteするという風にユーザーは識別できません。Control.SetStyle(ControlStyles.Selectable, true)をしたり、フォーカスが当たっているかどうかによって表示も切り替えるべきです。
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2005-08-04 00:51
yaさんのおっしゃるとおり、デザイナ上では確認できなかった
という意味です。お恥ずかしい…

何はともあれ、PictureBox から派生したカスタムコントロールを
作るとこから始めろよってとこですかね?
1

スキルアップ/キャリアアップ(JOB@IT)