- - PR -
「VB.NET」FORM上のコントロールを非明示的に一括処理したい
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-05-20 12:21
いつもお世話になっております。 VB.NET での質問をしに、またまたやってまいりました。 FORM上に何個かボタンを置いて、それらを同一の数種のイベントに ハンドルさせているのですが、ボタンが増えたり、イベントを増やしたり するたびに、コードが煩雑化または漏れがあったりと、あまり効率が よくないと思い、 For Each btnAll In (Form1の全てのボタン) AddHandler btnAll.MouseHover, AddressOf btnMouseHover AddHandler btnAll.Click, AddressOf btnClick Next の用に、FORM上にあるボタンを全部、何も考えずまとめて関連づけたい と思っているのですが、(Form1の全てのボタン) ここのところの 指定方法がわかりません。 たぶん、基礎的な問題のような気がするのですが。。。 というか、そもそもこういう事はできないのでしょうか。 |
|
投稿日時: 2004-05-20 13:11
Form.Controlsプロパティを使って再帰的に処理を行えば良いと思います。
ここが参考になるかも http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8270&forum=7 |
|
投稿日時: 2004-05-20 13:45
一郎様
ありがとうございました。 参考にして、以下のようにすっきりうまくいきました。 似たイメージは持ててたのですが、結果がついてこないのは、 やはり基礎がなってない証拠ですね。 Dim ctrl As Control For Each ctrl In Me.Controls If TypeOf ctrl Is Button Then AddHandler ctrl.Click, AddressOf cmdButtons_Click AddHandler ctrl.MouseHover, AddressOf cmdButtons_MouseHover AddHandler ctrl.MouseLeave, AddressOf cmdButtons_MouseLeave End If Next |
|
投稿日時: 2004-05-20 14:31
あれ・・・・
Panel等の中のボタンのイベントは処理しなくても良いんですか? 再帰的にしないと、あるコントロール(たとえばPanel)の子コントロールは処理の対象外になりますよね。 |
|
投稿日時: 2004-05-20 14:57
一郎様
度々アドバイスありがとうございます。 とりあえず子コントロールはないので、これで。 拾えなかったコントロールがあったら、その時にでも(^^; その前に、意味不明?なエラーでずっと途方に暮れてました(笑) Dim ctrl As Control For Each ctrl In Me.Controls の部分で、Me.Controls にすると、イベントは関連できたのですが、 アプリ終了時、以下のようにエラー中断してしまいます。 「このフォームの MDIParent として指定されたフォームは MDIContainer ではありません。」 で、Meがだめなのか、と思い、 Dim f As New frmMain Dim ctrl As Control For Each ctrl In f.Controls とすると、コントロールは認識するんですが、 肝心のAddHandler がうまくいかずに関連づけできません(謎) 中断のエラーはなく普通に終了できます。 Meの使いかたや、MDIフォームで何か制限とかあるのでしょうか。。 MDIフォーム表示コード部: Private Sub cmdButtons_Click(ByVal sender As System.Object, ByVal e As EventArgs) Dim fmdi As Form Dim frm As New Form Select Case sender.name Case "cmdButton1" frm = New frmChild1(Me) Case "cmdButton2" frm = New frmChild2(Me) Case "cmdButton3" : End Select For Each fmdi In Me.MdiChildren If fmdi.Name = frm.Name Then Exit Sub End If Next frm.MdiParent = Me frm.Show() |
|
投稿日時: 2004-05-20 15:02
皆様、大変失礼しました。
どうも会議室を選択する際、Insider.NET を選ぶつもりが。。 申し訳ございません。 さて、どうしよう。。。 |
1
