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

「現在どの修飾子キーが押されているか調べる」について

分類:[.NET]

修飾キーの判定機能を調べていましたが、
必要な調べごとはほとんどDOBON.NETさんで片付いてしまうのが素晴らしいです。
本当に頭が下がります。

ところで、修飾キー判定に
if (Control.ModifierKeys + Keys.Shift)
という構文がありましたが、+演算子ってオーバーロードされてますか?

実際にコンパイルするとコンパイルエラーが発生します。
if (Control.ModifierKeys == Keys.Shift)
に修正したところ、正常に動作しました。
> ところで、修飾キー判定に
> if (Control.ModifierKeys + Keys.Shift)
> という構文がありましたが、+演算子ってオーバーロードされてますか?

内容を読むと+のところは&の間違いのようですね。
後、C#の場合は型の扱いが厳密なので、+を&にしただけではコンパイルできません。

if ((Control.ModifierKeys & Keys.Shift) != Keys.None)

のようになります。Ctrl、Altの場合も同様です。
VBでもOption Strict Onにしている場合は同様の修正が必要になりますね。

> 実際にコンパイルするとコンパイルエラーが発生します。
> if (Control.ModifierKeys == Keys.Shift)
> に修正したところ、正常に動作しました。

これだとShiftキーだけ押されている場合はよいですが、
Ctrl、Altなどと複数同時押しの場合に正しく判定されません。
2003/09/08(Mon) 02:57:09 編集(投稿者)

■No594に返信(よねKENさんの記事)

ご報告ありがとうございました。出来るだけ早く修正します。これからも不審な点がありましたらお気軽にご報告ください。

VB.NETのコードは正しいようなので、またもやVB.NETからC#へのコード変換で失敗したようです。やはり両方に対応するのは厳しいですね。
返事が遅れ、申し訳ないです。
> if ((Control.ModifierKeys & Keys.Shift) != Keys.None)
大変参考になりました。
ありがとうございます。
解決済み!

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