トップ回答者
GroupBoxにMouseDownなどのイベントがありませんが

質問
回答
-
プロパティウィンドウには表示されていませんが、コードでイベントハンドラを設定できます。
public partial class Form1 : Form { public Form1() { InitializeComponent(); groupBox1.MouseDown += new MouseEventHandler(groupBox1_MouseDown); } void groupBox1_MouseDown(object sender, MouseEventArgs e) { MessageBox.Show("MouseDown"); } }
なかむら(http://d.hatena.ne.jp/griefworker) -
わざわざ
[Browsable(false)]
public new event EventHandler ~
のように new してまで隠しているのですね。
使ってほしくない理由がどこかに書かれてないかなと思って検索してみると、次のスレッド(英語)で質問されている人がいました。
Why does GroupBox not have a MouseMove event?
http://stackoverflow.com/questions/1710795/why-does-groupbox-not-have-a-mousemove-event難しくて理解できなかったのですが、理由は何かあるみたいですね。(^^;
(Windows の仕様にかかわるみたいです。)
リンク先に書かれている通り、FlatStyle の値を既定の "Standard" から "System" に変更してみると確かにイベントは発生しなくなりますね。
使わないで済むような仕様に変更できれば、使わない方が良いかもしれませんね。
MouseHover がそのまま表示されるのは漏れですかね。
追記:本当は隠されているだけなので使っても問題ないと言いたくて調べたんですが、結論が逆になっちゃいました。(^^; -
> 一般的に、プロパティウインドに無かったら、使って欲しくないということですか?
LostFocus イベントの説明には、佐祐理さんが引用されたような文言は書かれてないです。
なので使ってもいいと思います!
表示しないようになっているのにはそれぞれに理由があるはずで、LostFocus についてはたぶん、LostFocus イベントの「メモ」に書かれていることだと思います。
> 値を変え、他のフォームへ移った時に、値を確定させるために多数使用しています。
その場合、LostFocus イベントを使わなくても、Validating イベントや Validated イベントを使って値の検証や確定を行うコードにしておいて、別のフォームに移る前にフォームの Validate メソッドを実行するという方法もあると思います(Windows フォームとしては、これが一般的な方法だと思います)。
この方法がアプリケーションの仕様に合わない場合は、LostFocus で処理してもいいと思います。- 回答としてマーク クサキ 2010年12月21日 0:27
-
一般的に、プロパティウインドに無かったら、使って欲しくないということですか?
テキストボックスの_LostFocusイベントもプロパティウインドウにイベントが
ありませので、自力でやっていますが、同じことなのかも知れませんね。
こちらは既に多数使っていまして、機能的にもぜひ欲しいものです。
特に問題が発生しているとも感じていませんが、
何かマズイコトが発生するかも知れないということですか。
とりあえずは今のまま行くしかないと思っていますが、悩ましいですね。
_LostFocusイベントを使っている理由は、複数のフォームを使っていまして、
値を変え、他のフォームへ移った時に、値を確定させるために多数使用しています。LostFocusイベントの使用は推奨されていません。かわりにLeaveイベントを使用してください。
Control.LostFocus イベント (System.Windows.Forms)
--リンク先より引用ここから
GotFocus イベントおよび LostFocus イベントは、WM_KILLFOCUS Windows メッセージおよび WM_SETFOCUS Windows メッセージに結び付けられた、下位のフォーカス イベントです。 一般的に、GotFocus イベントおよび LostFocus イベントは、UICues を更新するとき、またはカスタム コントロールを作成するときにだけ使用されます。 代わりに、Activated イベントおよび Deactivate イベントを使用する Form クラスを除くすべてのコントロールに、Enter イベントおよび Leave イベントを使用する必要があります。
-- 引用ここまで
Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/- 回答としてマーク クサキ 2010年12月21日 0:27
すべての返信
-
プロパティウィンドウには表示されていませんが、コードでイベントハンドラを設定できます。
public partial class Form1 : Form { public Form1() { InitializeComponent(); groupBox1.MouseDown += new MouseEventHandler(groupBox1_MouseDown); } void groupBox1_MouseDown(object sender, MouseEventArgs e) { MessageBox.Show("MouseDown"); } }
なかむら(http://d.hatena.ne.jp/griefworker) -
わざわざ
[Browsable(false)]
public new event EventHandler ~
のように new してまで隠しているのですね。
使ってほしくない理由がどこかに書かれてないかなと思って検索してみると、次のスレッド(英語)で質問されている人がいました。
Why does GroupBox not have a MouseMove event?
http://stackoverflow.com/questions/1710795/why-does-groupbox-not-have-a-mousemove-event難しくて理解できなかったのですが、理由は何かあるみたいですね。(^^;
(Windows の仕様にかかわるみたいです。)
リンク先に書かれている通り、FlatStyle の値を既定の "Standard" から "System" に変更してみると確かにイベントは発生しなくなりますね。
使わないで済むような仕様に変更できれば、使わない方が良いかもしれませんね。
MouseHover がそのまま表示されるのは漏れですかね。
追記:本当は隠されているだけなので使っても問題ないと言いたくて調べたんですが、結論が逆になっちゃいました。(^^; -
一般的に、プロパティウインドに無かったら、使って欲しくないということですか?
テキストボックスの_LostFocusイベントもプロパティウインドウにイベントが
ありませので、自力でやっていますが、同じことなのかも知れませんね。
こちらは既に多数使っていまして、機能的にもぜひ欲しいものです。
特に問題が発生しているとも感じていませんが、
何かマズイコトが発生するかも知れないということですか。
とりあえずは今のまま行くしかないと思っていますが、悩ましいですね。
_LostFocusイベントを使っている理由は、複数のフォームを使っていまして、
値を変え、他のフォームへ移った時に、値を確定させるために多数使用しています。 -
> 一般的に、プロパティウインドに無かったら、使って欲しくないということですか?
LostFocus イベントの説明には、佐祐理さんが引用されたような文言は書かれてないです。
なので使ってもいいと思います!
表示しないようになっているのにはそれぞれに理由があるはずで、LostFocus についてはたぶん、LostFocus イベントの「メモ」に書かれていることだと思います。
> 値を変え、他のフォームへ移った時に、値を確定させるために多数使用しています。
その場合、LostFocus イベントを使わなくても、Validating イベントや Validated イベントを使って値の検証や確定を行うコードにしておいて、別のフォームに移る前にフォームの Validate メソッドを実行するという方法もあると思います(Windows フォームとしては、これが一般的な方法だと思います)。
この方法がアプリケーションの仕様に合わない場合は、LostFocus で処理してもいいと思います。- 回答としてマーク クサキ 2010年12月21日 0:27
-
一般的に、プロパティウインドに無かったら、使って欲しくないということですか?
テキストボックスの_LostFocusイベントもプロパティウインドウにイベントが
ありませので、自力でやっていますが、同じことなのかも知れませんね。
こちらは既に多数使っていまして、機能的にもぜひ欲しいものです。
特に問題が発生しているとも感じていませんが、
何かマズイコトが発生するかも知れないということですか。
とりあえずは今のまま行くしかないと思っていますが、悩ましいですね。
_LostFocusイベントを使っている理由は、複数のフォームを使っていまして、
値を変え、他のフォームへ移った時に、値を確定させるために多数使用しています。LostFocusイベントの使用は推奨されていません。かわりにLeaveイベントを使用してください。
Control.LostFocus イベント (System.Windows.Forms)
--リンク先より引用ここから
GotFocus イベントおよび LostFocus イベントは、WM_KILLFOCUS Windows メッセージおよび WM_SETFOCUS Windows メッセージに結び付けられた、下位のフォーカス イベントです。 一般的に、GotFocus イベントおよび LostFocus イベントは、UICues を更新するとき、またはカスタム コントロールを作成するときにだけ使用されます。 代わりに、Activated イベントおよび Deactivate イベントを使用する Form クラスを除くすべてのコントロールに、Enter イベントおよび Leave イベントを使用する必要があります。
-- 引用ここまで
Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/- 回答としてマーク クサキ 2010年12月21日 0:27
-