卒論の関係で、Visual Basic 2005 Express Editionを使用して、システムを構築しています。
スレッドまたはフォームが複数あるため、デリゲートを使用することになったのですが、invokeの対象であるメソッドで引数を使用することはできるのでしょうか?
引数なしの場合、現時点では次のように記述しています。
A.show()
A.Invoke(New MethodInvoker(AddressOf A.Status_Timer))
Public Sub Status_Timer()
処理
End Sub
MethodInvokerは、デリゲート宣言なしでinvokeを使えることができ、本来?のデリゲート宣言して、invokeを使う場合は以下のようになります。
A.show()
A.Invoke(New SetFocusDelegate(AddressOf A.Status_Timer))
Delegate Sub SetFocusDelegate()
Public Sub Status_Timer()
処理
End Sub
ここで、Status_Timer()に引数を指定して、たとえば、
Public Sub Status_Timer(ByVal data As integer)
処理
End Sub
とした場合、invokeでの記述がうまくいきません。
もともと、invokeではそんなことはできないかもしれませんが、何か方法ありますでしょうか?現時点では、引数を使用することができないので、スレッドまたはフォーム間で、プロパティを使用して、情報を渡しています。以下のような形です。できれば、プロパティを使用したくないのですが・・・
Public Property test() As state
Get
Return _test
End Get
Set(ByVal value As state)
_test = value
End Set
End Property
No.2ベストアンサー
- 回答日時:
MSDN の MethodInvoker デリゲートの説明にもありますが
http://msdn.microsoft.com/ja-jp/library/system.w …
-- 引用 --
void として宣言された、パラメータをとらない任意のメソッドを、マネージ コード内で実行できるデリゲートを表します。
-- 引用終わり --
ということなので、MethodInvoker はパラメータを取らないメソッド専用です。
本来は Delegate を自分で宣言するものなのですが、パラメータを取らないメソッドを使って Invoke を実行する機会は多いと思われるので、いちいち Delegate を宣言しなくても呼び出せるようにするために、フレームワーク側で用意されているのが、MethodInvoker です。
No.1
- 回答日時:
Control.Invoke はオーバーロードされていて、object の配列を取るバージョンがあります。
それはまさに、引数を渡すためにあります。http://msdn.microsoft.com/ja-jp/library/system.w …
Delegate の宣言側も同じ Integer 型の引数を取るように修正して、Invoke の第2引数以降にパラメータを書けばよいはずです。
回答ありがとうございます。
デリゲートにも同じように引数を取るようにするとできました。以下、修正した記述。
Me.Invoke(New SetFocusDelegate(AddressOf Me.Status_Timer), 10, 100)
Delegate Sub SetFocusDelegate(ByVal a As Integer, ByVal b As Integer)
Sub Status_Timer(ByVal a As Integer, ByVal b As Integer)
Debug.Print(a.ToString + "," + b.ToString)
End Sub
MethodInvokerの方が、なぜかうまくいかないです。省略しているデリゲートにも対応するのかと思ったのですが、うーむ。もう少しがんばってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
エクセルVBAにおけるON TIMEメ...
-
関数とメソッドの違い
-
JSPで<SELECT>の中にDBから持っ...
-
DataGridViewでセルクリックイ...
-
mainメソッドのthrows節で設定...
-
javascriptからjavaを呼び出したい
-
Labelコントロールに数字を代入...
-
VBPをダブルクリックするとたま...
-
ExcelのxlDialogInsertPictureで。
-
onClickで関数呼出し後に、結果...
-
final修飾子を使っているのに、...
-
【sendkeysメソッドが動かずに...
-
コマンドプロンプト実行後に画...
-
Excel VBA シェイプの原型のサ...
-
Application.Wait の参照設定
-
3つの倍精度浮動小数点値の平均...
-
Range クラスのAutoFitプロパテ...
-
C# 演算 最大値 最小値 表現の仕方
-
「CA2202: オブジェクトを複数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
エクセルVBAにおけるON TIMEメ...
-
【sendkeysメソッドが動かずに...
-
コマンドプロンプト実行後に画...
-
onClickで関数呼出し後に、結果...
-
DataGridViewでセルクリックイ...
-
Labelコントロールに数字を代入...
-
ExcelのxlDialogInsertPictureで。
-
final修飾子を使っているのに、...
-
JSPで<SELECT>の中にDBから持っ...
-
VBPをダブルクリックするとたま...
-
Excel VBA でExcelを終了したい...
-
Refreshメソッドの使い方
-
ウィンドウを最前面にできません
-
javascriptからjavaを呼び出したい
-
VB.netで、シリアル通信のタイ...
-
mainメソッドのthrows節で設定...
-
VBAでSaveAs使用し、指定してい...
-
PDFファイルから別ウィンドウで...
-
Application.Wait の参照設定
おすすめ情報