- PR -

コントロールのキー操作

1
投稿者投稿内容
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-12 11:47
Windows FormのあるコントロールAのキーダウンイベントで
キーコードを判断して(必要によりキーコードを変更する)、
別のコントロールBにキーコードを転送することが可能ですが、
このとき、Shift、Controlの状態も一緒に転送したいです。
何か方法ありませんでしょうか?
よろしくお願いします。
現在はこんな感じです。なんとかして標準のコードでしたいですが、
どうしても無理ならAPIでもなんでも結構です。ご教授願えませんでしょうか?
MapVirtualKey なんかは使えそうですかね?
問題はe.Shiftプロパティとかは中で何を調べているかですが。

A のキーダウンイベントないです。
コード:

private void A_KeyDown(object sender, KeyEventArgs e){
// A で右→キーが押されたら B に左←キーとして転送
if(e.KeyCode == Keys.Right){
KeyEventArgs kea = new new KeyEventArgs(Keys.Left);
if(e.Shift == true){
// kea.Shift = true; //無理!
}
B_KeyDown(null, kea);
}
}




言い忘れましたが、
この場合、事情でSendKeysは使用できないことになってます。

_________________
世界平和を願う!
http://park8.wakwak.com/~chin/

[ メッセージ編集済み 編集者: CHN 編集日時 2004-04-12 11:56 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-12 12:00
>別のコントロールBにキーコードを転送する
と書いてありますが、ソースを見るとBのKeyDownイベントに結び付けられたメソッドB_KeyDown()をコードから呼んでいるように見えますが。

OnKeyDown()メソッドを使ってみてはどうでしょう。Protectedなので直接外からは
呼べませんけどね。
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-12 12:10
引用:

一郎さんの書き込み (2004-04-12 12:00) より:
>別のコントロールBにキーコードを転送する
と書いてありますが、ソースを見るとBのKeyDownイベントに結び付けられたメソッドB_KeyDown()をコードから呼んでいるように見えますが。


ありがとうございます。
転送といっても、呼び出しているだけっす。すいません。

OnKeyDownですか、、、ヘルプを見てやはりKeyEventArgsがありますね。
こいつのShiftプロパティはgetだけですので、なんか同じという感じです。
私が一郎さんの言われていることを理解できていないかもしれません、
もし、なにかありましたらもう少しくわしく教えていただけないでしょうか?
_________________
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-12 12:51
どうも、すいません。
なんか、すっげー簡単でした。
KeyEventArgs(Keys.Shift | Keys.Left);
でOKでした。勉強不足でした。

_________________
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-12 14:06
なるほど。
KeysにはFlagsAttribute属性が付いているので、ビットを立ててやればいいんですね。
KeyEventArgsコンストラクタの第一引数の説明にも
引用:

押されたキーを表す Keys 。これには、同時に押されたキーが Ctrl キー、Shift キー、Alt キーのいずれかの組み合わせであることを示す修飾フラグが含まれます。この値は、 Keys 列挙体の定数にビット単位の OR (|) 演算を適用した値になります。


と書いてありますね。

私が書いた「OnKeyDown()メソッドを使ってみては」というのは、A_KeyDown()で受け取ったeをそのままOnKeyDownに渡してやれば良いかなと思ったんです。
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-12 14:13
引用:

一郎さんの書き込み (2004-04-12 14:06) より:
なるほど。
KeysにはFlagsAttribute属性が付いているので、ビットを立ててやればいいんですね。
KeyEventArgsコンストラクタの第一引数の説明にも
引用:

押されたキーを表す Keys 。これには、同時に押されたキーが Ctrl キー、Shift キー、Alt キーのいずれかの組み合わせであることを示す修飾フラグが含まれます。この値は、 Keys 列挙体の定数にビット単位の OR (|) 演算を適用した値になります。


と書いてありますね。

私が書いた「OnKeyDown()メソッドを使ってみては」というのは、A_KeyDown()で受け取ったeをそのままOnKeyDownに渡してやれば良いかなと思ったんです。



ご指摘のとおりです。面目ないです。
大変失礼しました。
ヘルプにかいてあったんです。
書いてあっても、実はみえないですよ???^^
人に聞いてみて初めて気がつくことがあるんです。
って、自分を正当化しても い、いいでしょうか、、、、、

_________________
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-12 14:39
引用:

CHNさんの書き込み (2004-04-12 14:13) より:

ヘルプにかいてあったんです。
書いてあっても、実はみえないですよ???^^
人に聞いてみて初めて気がつくことがあるんです。


 ありますね、非常に、よく。自分で書いたコードでさえも、見えなくなっていることがありますね。。。
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-12 14:54
Jittaさん、ありがとうございます。
なんか少し楽になりました^^♪
あまりこういうしようもない質問をしないように
したいですね。
と言いながら、また、ありそうな。
すいません

_________________
1

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