• ベストアンサー

VB.NETで同一処理を実行させたい

VB.NETでプログラム組んでいます。 下のように、あるフォームの中でメニューを設定して、メニューを選択すると処理を実行するようにしています。 Private Sub OpenMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenMenu.Click (オープンメニュークリック時の処理) End Sub このとき、同一フォームの中にツールバーを下のように設定して 上の(オープンメニュークリック時の処理)を実行させるには、 次の???の記述はどのようにすればよいのでしょう?。 (オープンメニュークリック時の処理)はかなり長い処理(関数(Private Sub Function)も含む)になってしまっているので、コピーして記述するのも嫌なのです。 普通に 「OpenMenu_Click()」 でよいのかと思っていましたが、引数(eでしょうか?)を設定しないとだめのようで、。 どのようにすればよいのかわかりません。すみませんが、ご教示ください。 Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick   ??? End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.1

「オープンメニュークリック時の処理」をサブルーチンにして OpenMenu_Click()とToolBar1_ButtonClick()から呼べば良いのでは? Private Sub OpenMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenMenu.Click   OpenMenu() End Sub Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick   OpenMenu() End Sub Private Sub OpenMenu() (オープンメニュークリック時の処理) End Sub

nobunorinobu
質問者

お礼

回答ありがとうございます。 そうですね。サブにすればすむ問題でしたね。 むづかしく考えすぎていたようでした。 どうも慣れてないもので、、、。 ありがとうございました。

その他の回答 (2)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

 1つの明快な解は、その部分をプロシージャ(FunctionやSub)にして2つのイベントから呼び出すというものだ。これは、それだけのために1つプロシージャを作成する必要があるが、共通部分をプロシージャにして、2つのイベント内で呼び出し、個々の処理を別々に記述する事ができる。 Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick OpenMenu_Click(sender, e) End Sub でも動きそうな気もしないでもないが、やはりツールバーイベントの特性上、分けた方が良いだろう。他にも、 Private Sub OpenMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenMenu.Click, ToolBar1.ButtonClick (オープンメニュークリック時の処理) End Sub という風に、VB.NETではVB6と違って1つのプロシージャを2つのイベントハンドラにする事もできる。ただ、理論上は動作すると思うが、ツールバー相手にできるかどうかは分からない。

nobunorinobu
質問者

お礼

回答ありがとうございます。 下の方のお礼にも書かせていただきましたが、 2つのイベントハンドラにすると、 厄介なことになりそうなので、 結局サブにして呼び出すことにしました。 ありがとうございました。

回答No.2

1 共通化する Private Sub OpenMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenMenu.Click hogehoge_proc() End Sub Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick hogehoge_proc() End Sub Private Sub hogehoge_proc() (オープンメニュークリック時の処理) End Sub が普通。 2 .NETだから Private Sub hogehoge_proc(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles OpenMenu.Click, ToolBar1.ButtonClick (オープンメニュークリック時の処理) End Sub って両のっけでもいいかも 3 どうしてもってなら Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick  OpenMenu_Click(sender,e) End Sub ってできるよ

nobunorinobu
質問者

お礼

回答ありがとうございます。 1の方法は下の方のお礼にも書きましたがありがとうございました。 2や3の方法は私知りませんでしたので、やってみました。 2の方法ですと、どうもハンドルするところに toolbar1.clickとすると良いようですが、 ツールバーにボタンが複数ある場合 (例えばtoolbarbutton1~toolbarbutton5) に面倒なことにどのボタンを押しても実行してしまうようで、 使いづらくなるようでやめました。 3の方法も引数設定することでできました。 でもやっぱ、嫌ですよね。 やはり1の方法を採用することにしました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう