前提・実現したいこと
C#のClickイベントハンドラのパラメータである、EventArgs型e.Xの値を取得したいです。
デバッグをするとEventArgs型のe.Xには、int型の47という値が入っているようですが、
値を取得するために「int a = e.X;」と記述してもエラーとなってしまいます。
何が問題なのでしょうか。教えていただけますでしょうか。
★★★
// 追記
EventArgsクラスを調べたところ、get/setがありませんでした。
そもそもEventArgsクラスにはXという値が格納されていないのでしょうか?
もし、EventArgsクラスにXという値が格納されていないのなら、デバッグ上で表示されていた
int型の47という値はどこからプログラム上で参照して利用することができるのでしょうか?
ご教授いただけると幸いです。
引数の型が違います。
リファレンスを確認しましょう。
引数というのは、button1_Clickの仮引数である「EventArgs e 」のことでしょうか?
コピペ縛りで計算機を作ってる人か。
計算機?に「EventArgs e 」が利用されているという意味でしょうか?
質問の上の画像で e の「種類」を見ると System.EventArgs {System.Windows.Forms.MouseEventArgs} となっているはずで、確かに Click イベントのハンドラの引数 e には MouseEventArgs が渡されているようです。でもそれが書いてある Microsoft の公式ドキュメントが見つかりません。逆に、その EventArgs は "it only indicates that a click has occurred. (クリックが発生したことを示すにすぎません)" と書いてあるのですが・・・
確かに、MicrosoftサイトのControl.Click Eventには、「クリックが発生したことを示すだけ」としか書かれておらず、謎ですね。
マウスがクリックされたから、引数 e には MouseEventArgsが渡されていた(スーパークラスの型であるEventArgs型の仮引数に代入)と勝手に自分の中で納得していましたが、公式ドキュメントに書かれていない推測で納得していた自分に反省です。
どなたか引数 e にMouseEventArgsが渡される理由がわかるドキュメントをご存じの方はいらっしゃるでしょうか?
この質問を新しくteratail上に挙げたほうが良いでしょうか?
EventArgs はマウスクリックイベントで作られたものが使いまわされているだけでしょう。ただしドキュメントされていないのであれば、いつ仕様変更があるかはわからないため、これを使ってはいけません。
Click イベントの代わりに MouseClick イベントをハンドルするのが良いと思います。
上の私のレスが言葉足らずだったようです。「Control.Click イベントのハンドラで MouseEventArgs が取得できる」と明記されている公式ドキュメントが見つけられない限りはたまたまそうなっているだけで、将来書いてある通り「クリックが発生したことを示すにすぎません(マウス情報は取得できなくなる)」になるかもしれない。なので、 subly さんが言われるように「マウス情報が必要な場合は、MouseClickイベントを使用する」のが良さそうということも言いたかったのです。
そもそも Button.Click イベントでマウス情報が必要なことは普通はなさそうだと思うのですが。
回答1件
あなたの回答
tips
プレビュー