Vb.net AdressOf方法签名
既然我不能输入参数,我怎么能尊重以下签名Vb.net AdressOf方法签名,vb.net,.net-2.0,begininvoke,Vb.net,.net 2.0,Begininvoke,既然我不能输入参数,我怎么能尊重以下签名 Private Sub SetFocusToRow(ByRef ultraGridRow As Infragistics.Win.UltraWinGrid.UltraGridRow) grdSoldeOuverture.ActiveCell = ultraGridRow.Cells(0) grdSoldeOuverture.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridActio
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在VisualStudio2005的.NET 2.0上运行,因此lambda表达式不是一个选项。您可以使用lambda捕获需求并将其传入:
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)
由于lambda会导致问题,您可以尝试使用对象手动实现它们:
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))
这就是lambda在引擎盖下的实现方式,所以这应该是可行的。您可以将对象概括为接受委托并在更多地方使用它。如果我没记错的话,lambdas在Framework 2.0中不存在,对吗?忘了提到我的框架不知道我必须使用lambda…@PhaDaPhunk Lambdas是一个编译器功能,所以你可能不需要对它们的框架支持(公平地说,我现在不确定),只是一个现代的VB编译器。这对你来说可能吗?@PhaDaPhunk好的-刚刚编辑以显示使用控件的“正常”老式方式。BeginInvoke…@PhaDaPhunk你拼写对了吗?你的问题有很多拼写错误。。。你能出示你的准确密码吗?如果您正确定义了代理,上面的操作应该有效…我会注意到错误是否与拼写有关。。。我用完整的原始代码更新了我的问题。。如何更改它以使其工作?谢谢谢谢这是一个很好的方法。。但我想做的有点过分了。。。我想我可以找到另一种方法而不必担心。。。所以这是我唯一的选择?这比仅仅定义自定义委托类型和使用BeginInvoke重载来获取参数要困难得多…是的,但当他说他不能使用lamdas时,我首先想到的是,像vb在后台那样实现它们