none
2つめのFormのイベントを1つめのFormで処理したいのですが RRS feed

  • 質問

  • 初めて2つ目のFormを使用するプログラムを書いています。
    2つ目のFormに配置したボタンのクリックイベントを最初のForm側で処理したいのですが、これは可能なことなのでしょうか。
    インターネットなどで調べてみたのですがよく分かりませんでした。
    よろしくお願いします。
    2011年12月30日 1:42

回答

  • できますが、AddHandler キーワードを使わないといけないかもしれませねんね。
    2 つ目の Form 変数の中のコントロール変数の中の Click イベントととか。
    (参考サイト:http://dobon.net/vb/dotnet/beginner/eventhandle.html)

    ただ、あんまりそういうことをやっていると、1 つ目の Form に 2 つ目の Form のコードがたくさん載ることになるので、わかりづらくなります。
    本当に必要なものだけ、2 つ目の Form が独自のイベントを発行するようにして、どのボタンがとかを 1 つ目の Form 側で気にしないようにできるとよいとは思いますが…。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答の候補に設定 山本春海 2012年1月11日 7:49
    • 回答としてマーク 山本春海 2012年1月13日 7:40
    2011年12月30日 1:50
    モデレータ
  • 一つ目のフォームクラスに public メソッドを用意して、二つ目のフォームのイベントでそのメソッドをコールするのではダメなのでしょうか?

    ※二つ目のフォームにプロパティを用意してそのプロパティに一つ目のフォームをセットするみたいな造りで行けるのではないでしょうか。

    • 回答の候補に設定 山本春海 2012年1月11日 7:49
    • 回答としてマーク 山本春海 2012年1月13日 7:40
    2012年1月4日 6:58
  • Form のイベントを別の Form で処理したいと思うに至った動機を明らかにした方がいいと思います。
    例えば、同じ処理を1ヶ所に記述したいといった理由であれば、他に解決する方法があるような気がしますので。
    • 回答の候補に設定 山本春海 2012年1月11日 7:49
    • 回答としてマーク 山本春海 2012年1月13日 7:40
    2012年1月4日 9:55
  • 質問を読み限りは、

     

    Form2.Button1.PerformClick


    で済むような感じですが。さもさければ、もっと詳しく説明してもらわないとわかりません。


    Onion is a recent refuge from Mac OS X and hates Mac App Store. System: Windows 7 x64
    • 回答の候補に設定 山本春海 2012年1月11日 7:49
    • 回答としてマーク 山本春海 2012年1月13日 7:40
    2012年1月5日 4:35

すべての返信

  • できますが、AddHandler キーワードを使わないといけないかもしれませねんね。
    2 つ目の Form 変数の中のコントロール変数の中の Click イベントととか。
    (参考サイト:http://dobon.net/vb/dotnet/beginner/eventhandle.html)

    ただ、あんまりそういうことをやっていると、1 つ目の Form に 2 つ目の Form のコードがたくさん載ることになるので、わかりづらくなります。
    本当に必要なものだけ、2 つ目の Form が独自のイベントを発行するようにして、どのボタンがとかを 1 つ目の Form 側で気にしないようにできるとよいとは思いますが…。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答の候補に設定 山本春海 2012年1月11日 7:49
    • 回答としてマーク 山本春海 2012年1月13日 7:40
    2011年12月30日 1:50
    モデレータ
  • 一つ目のフォームクラスに public メソッドを用意して、二つ目のフォームのイベントでそのメソッドをコールするのではダメなのでしょうか?

    ※二つ目のフォームにプロパティを用意してそのプロパティに一つ目のフォームをセットするみたいな造りで行けるのではないでしょうか。

    • 回答の候補に設定 山本春海 2012年1月11日 7:49
    • 回答としてマーク 山本春海 2012年1月13日 7:40
    2012年1月4日 6:58
  • そのやり方は「循環参照」と呼ばれ、あまり好まれるアプローチではないという点も触れておいた方がよいかと。
    もちろん、一人で作って一人で完結するとか、かなりの小規模のプログラムであるとかなら、そのデメリットが効いてくる可能性は低いので、循環参照でとりあえず逃げるのも一手です。

    私が元に書いていた(前半の)内容も責務の分担としてはよくありません。
    このため、必要なものだけ別途イベントを発行するべきだとして苦言を呈していました。

     

    チームで開発するとか、ある程度の規模のプログラムを書くとか、将来の保守を考慮するのであれば、循環参照や 2 つ目のフォームを完全にコントロールすること(越権行為といえるか?)は避けた方がよいでしょう。
    なぜなら、2 つ目のフォームの挙動を知るのに、1 つ目のフォームのコードまですべて読まないといけません。
    イベントで依存関係を一方向に切り離せていれば、コードを読む範囲を広げるリスクを軽減します。(設計や実装によっては、リスクの軽減につながらない可能性も残る)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2012年1月4日 9:27
    モデレータ
  • Form のイベントを別の Form で処理したいと思うに至った動機を明らかにした方がいいと思います。
    例えば、同じ処理を1ヶ所に記述したいといった理由であれば、他に解決する方法があるような気がしますので。
    • 回答の候補に設定 山本春海 2012年1月11日 7:49
    • 回答としてマーク 山本春海 2012年1月13日 7:40
    2012年1月4日 9:55
  • 質問を読み限りは、

     

    Form2.Button1.PerformClick


    で済むような感じですが。さもさければ、もっと詳しく説明してもらわないとわかりません。


    Onion is a recent refuge from Mac OS X and hates Mac App Store. System: Windows 7 x64
    • 回答の候補に設定 山本春海 2012年1月11日 7:49
    • 回答としてマーク 山本春海 2012年1月13日 7:40
    2012年1月5日 4:35
  • こんにちは、norikoshino さん。
     
    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
    しばらく経ちましたが、その後いかがでしょうか。
     
    みなさんから参考になる情報をいただいているかと思われましたので、勝手ながら私の方で回答としてマークさせていただきました。
    情報くださったみなさん、ありがとうございます。
     
    いただいた情報の中で解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、ご協力よろしくお願いいたしますね。

    今後とも、MSDN フォーラムをよろしくお願いいたします。
     
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海
    2012年1月13日 7:40