この人頭いいなと思ったエピソード

FormにButtonを配置し、クリックイベントで処理をする場合、高々3個のButtunの場合
Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.click,btn2.click,btn3.click
……
End Sub
で簡単ですが、ひらがななら46個?、アルファベットなら26個のボタンを配置し、上記のコードのHandles以下もその数分記述しなければいけません。とてつもない作業です。
 調べてみると、例えば
Dim btn as Button()=New Button(){btn1,btn2,…}
のように配列をつくり、
AddHandler btn(i).Click, AddressOf プロシージャ
で処理をすれば良いとのこと。
 しかし、考えてみますと「AddHandler btn(i).Click, AddressOf プロシージャ」の記述があるプロシージャにはどういけばよいのでしょうか。あくまでも、Clickイベントなんですよね。
…Handles btn().Click なんて動くはずもないし…。どうか宜しくお願いします。

A 回答 (1件)

> しかし、考えてみますと「AddHandler btn(i).Click, AddressOf プロシージャ」の記述があるプロシージャにはどういけばよいのでしょうか。

あくまでも、Clickイベントなんですよね。
> …Handles btn().Click なんて動くはずもないし…。どうか宜しくお願いします。

というのが何を意味しているかわかりませんが。


Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.click,btn2.click,btn3.click
……
End Sub

と書くのは

Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
……
End Sub

'Load等の必ず実行される場所に
AddHandler btn1.click, AddressOf btn_Click
AddHandler btn2.click, AddressOf btn_Click
AddHandler btn3.click, AddressOf btn_Click

とほぼ同等のことです。
    • good
    • 0
この回答へのお礼

kmeeさんにすれば「…Handles btn().Click」は奇妙だったのですね。以前私は配列arry()をすべて空にするコードをi=1:Do Until arry(i)=Nothing:arry(i)=Nothing:i=i+1:Loopと書いていましたが、最近Aarray.Clear(arry,0,arry.Length)で良いことを知りました。btn(1),btn(2),…と数十個も書かないで、btn()と一発で処理できないのかと悩んでいました。
 kmeeさんからの御教授、試してうまくいきました。私は、AddHandler btn1.Click,AddressOf btn_Clickはそのステートメントを通過すると無効になると思っていました。そこを通過するとプログラム終了までクリックするとbtn_Clickに行くのですね。
 本当にありがとうございました。

お礼日時:2015/03/10 04:24

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


おすすめ情報