3

パラメータを入れることができないので、次の署名を尊重するにはどうすればよいですか?

Private Sub SetFocusToRow(ByRef ultraGridRow As Infragistics.Win.UltraWinGrid.UltraGridRow)
    grdSoldeOuverture.ActiveCell = ultraGridRow.Cells(0)
    grdSoldeOuverture.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.EnterEditMode)
End Sub

このように呼ぶと

Me.BeginInvoke(New MethodInvoker(AddressOf Me.SetFocusToTemplateAddRow))

Microsoft Visual Basic 2005 を使用して Visual Studio 2005 で .NET 2.0 を使用しているため、ラムダ式はオプションではありません。

4

2 に答える 2

3

ラムダを使用して要件を取得し、渡すことができます。

Foo arg = GetTheFoo()

BeginInvoke(New MethodInvoker(Sub() SetFoo(arg)))

編集:

まず、メソッドをパスしないように変更しますByRef- これは不要です:

Private Sub SetFocusToRow(ByVal ultraGridRow As Infragistics.Win.UltraWinGrid.UltraGridRow)
    grdSoldeOuverture.ActiveCell = ultraGridRow.Cells(0)
    grdSoldeOuverture.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.EnterEditMode)
End Sub

次に、デリゲートを定義します。

' Define your delegate:
Delegate Sub SetFocusToRowDelegate(ByVal ultraGridRow As Infragistics.Win.UltraWinGrid.UltraGridRow)

次に、次の方法で呼び出すことができます。

BeginInvoke(new SetFocusToRowDelegate(AddressOf SetFocusToRow), arg)
于 2013-04-12T17:51:31.183 に答える
2

ラムダは問題を引き起こすため、オブジェクトを使用して手動で実装してみることができます:

Class FooCurry

    Private bar as Foo

    Private Sub new (foo as Foo)
       bar = foo
    End Sub

    Public sub DoFoo()
       bar.SetFoo()
    EndSub
End Class

dim foocurry as new FooCurry(foo)
BeginInvoke(New MethodInvoker(AdressOf foocurry.DoFoo))

これはラムダがボンネットの下で実装される方法であるため、これは機能するはずです。オブジェクトを一般化してデリゲートを取得し、より多くの場所で使用できます。

于 2013-04-12T18:01:55.090 に答える