タイトル : Re^2: 初めまして 投稿日 : 2006/11/09(Thu) 09:28 投稿者 : プログラム勉強中
回答ありがとうございます。 > > Public Sub setCtrl(ByRef Form As ※この部分が分かりません) > As Form でしょうね。各フォームは、すべて Form クラスを継承(Inherits)していますから。 > (名前空間を省略せずに書くなら、As System.Windows.Forms.Form で) 引数をFormにしてしまうと、 AddHandler ctrl.GotFocus, AddressOf Form.UserControlGotFocus でUserControlGotFocusがメンバーではありません。とエラーになってしまいます。 > なお、この場合は Test1〜Test4だけでなく、すべての種類のFormクラスが処理対象となります。 > もし、Test1〜Test4に限定したいのであれば、それらに共通の Interface を用意するか、 > あるいは、Test1〜Test4それぞれのオーバーロードメソッドを用意してみてください。 今回はこの共通関数をライブラリにして色々なプロジェクトから呼べたらと思っています。 なのでTest1〜Test4に限定しなくても良いのですが、やはりこの書き方では無理なような気がします・・・。 質問ばかりで恐縮ですが、引数で AddressOf 〜 の〜の部分を引き渡すのは可能でしょうか? たとえば Public Sub setCtrl(ByRef Form As System.Windows.Forms.Form,Byval Address as ※不明) Dim ctrl as Control For Each ctrl In Form.Controls AddHandler ctrl.GotFocus AddressOf Address Next End sub のようにできたらいいのですが。 > > Public Sub setCtrl(ByRef Form As Sample.Test1) > ここは ByRef ではなく、ByVal にすべきかと。 そのとおりですね!Byvalに変更します。ご指摘ありがとうございます。 |