BC31143在表单加载中使用委托时出错



我有一个包含两种类型数据的表单:

  • 显示表单时必须显示的当前数据
  • 历史数据,如果用户点击专用按钮可能会显示。这两种类型都来自数据库。

由于历史数据可能需要更多的时间来获取,我希望在显示表单后获得它们。

表单通过以下方式打开:

Public Sub DisplayUgc(_strIdUgcToDisplay As String, _strPlatformUgcToDisplay As String)
Dim frmUgcNotice as New frmNoticeUgc
If IsMyFormOpened(frmUgcNotice) = False Then
frmUgcNotice.strIdUgcToDisplay = _strIdUgcToDisplay
frmUgcNotice.strPlatformUgcToDisplay = _strPlatformUgcToDisplay
frmUgcNotice.Show()
Else
MsgBox(strMsgNoticeAlreadyOpened, MsgBoxStyle.Exclamation, strMsgBoxGeneralErrorTitle)
Exit Sub
End If
'[...Then, some code where every other controls in the form is set...]

所以,为了得到我想要的并遵循这篇文章,我这样做了:

Public Class frmNoticeUgc
Inherits Form
Public Delegate Sub DoWorkDelegate()
Public Sub New()
InitializeComponent()
End Sub    
Friend tblHistoricalDatas As New DataTable  ' Historical Datas
Friend WithEvents strIdUgcToDisplay As String
Friend WithEvents strPlatformUgcToDisplay As String
Private Sub frmNoticeUgc_Load(sender As Object, e As EventArgs) Handles MyBase.Load

InitUgcCombobox()
InitUgcDatagrid()
Select Case Me.btnValidation.Text
Case "Ajouter"
SetFormControls("add")
Case "Modifier"
Me.tblHistoricalDatas  = BeginInvoke(New DoWorkDelegate(AddressOf GetHistoricalDatas(Me.strIdUgcToDisplay, Me.strPlatforme))
SetFormControls("modify")
End Select
SetFormColor(Me)
End Sub

WithGetHistoricalDataslike:

Public Function GetHistoricalDatas(_strUserId As String, _strPlatforme As String) As DataTable
Dim tblGetAllVersions As Datatable
' [...] Some code to get the historical datas
Return tblGetAllVersions

End Function

问题:我有一个BC31143,方法'公共函数GetHistoricalDatas(_strUserId作为字符串,_strplatform作为字符串)作为DataTable'没有签名与委托' frmnotifeugc . doworkdelegate '兼容。我不明白是什么原因导致这个问题考虑到tblHistoricalDatas是一个数据表和gethhistoricaldatas返回一个数据表

我错过了什么?Precision:GetHistoricalDatas不在form code中,此函数位于项目的其他位置。但是,因为它是一个公共函数,我假设(也许我错了),这不会是一个问题。

不能使用具有不同签名的委托调用方法。你的方法是一个具有两个String参数的Function,并返回一个DataTable,而你的委托是一个没有参数的Sub。您应该使用与您打算调用的方法相同的签名声明您的委托:

Public Delegate Function DoWorkDelegate(p1 As String, p2 As String) As DataTable

请注意,参数名称实际上并不重要,但您应该给它们起合适的名称,就像其他所有内容一样。如果委托只用于调用一个方法,则使用与该方法相同的参数名。

也就是说,现在没有什么必要声明你自己的委托。要调用Sub,请使用合适的Action委托;要调用Function,请使用合适的Func委托。都可以有最多16个参数。

请注意,这解决了你问的具体问题,但你的代码仍然存在问题,这绝对不是我要做的。

相关内容

  • 没有找到相关文章

最新更新