プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (3件)

「オープンメニュークリック時の処理」をサブルーチンにして


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/04 22:40

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

ってできるよ
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
1の方法は下の方のお礼にも書きましたがありがとうございました。

2や3の方法は私知りませんでしたので、やってみました。
2の方法ですと、どうもハンドルするところに
toolbar1.clickとすると良いようですが、
ツールバーにボタンが複数ある場合
(例えばtoolbarbutton1~toolbarbutton5)
に面倒なことにどのボタンを押しても実行してしまうようで、
使いづらくなるようでやめました。

3の方法も引数設定することでできました。
でもやっぱ、嫌ですよね。
やはり1の方法を採用することにしました。
ありがとうございました。

お礼日時:2004/12/04 23:15

 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つのイベントハンドラにする事もできる。ただ、理論上は動作すると思うが、ツールバー相手にできるかどうかは分からない。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/04 23:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!