我一直在使用以下代码,该代码将通过单击数据网格单元格中的按钮打开通用表单。这几个月来一直运行良好,但是我需要以另外几种形式实现相同的代码,所以为了节省重复代码,我决定创建一个包装类来处理这个问题,并在需要的地方创建这个类的一个实例。但是,我得到一个“从类型'ComplexPropertiesFormWrapper' to type 'IWin32Window' is not valid.'
错误转换”,考虑到它在我的第一个实现版本中起作用,我根本不明白。
首次实施(按预期工作):
Private Sub editorButton_Click(sender As Object, e As EditorButtonEventArgs)
Dim dataObject As New DataObject()
Dim dataObjectType As Type = dataObject.Type
Dim formType As Type = GetType(ManageComplexProperties(Of )).MakeGenericType(dataObjectType)
Dim complexPropertiesForm = Activator.CreateInstance(formType, _
New Object() {dataObject.Value, dataObject.ValueIsList, Nothing, MyBase.UnitOfWorkNH})
If complexPropertiesForm.ShowDialog(Me) = DialogResult.OK Then
dataObject.Value = complexPropertiesForm.GetResult()
End If
complexPropertiesForm.Dispose()
End Sub
第二个实现(如上所述得到错误):
这是上面修改后的事件处理程序:
Private Sub editorButton_Click(sender As Object, e As EditorButtonEventArgs)
Dim dataObject As New DataObject()
Dim dataObjectType As Type = dataObject.Type
Dim complexPropertiesFormWrapper As New ComplexPropertiesFormWrapper(dataObjectType, dataObject.Value, dataObject.ValueIsList, Nothing, MyBase.UnitOfWorkNH)
complexPropertiesFormWrapper.Show()
dataObject.Value = complexPropertiesFormWrapper.Value
complexPropertiesFormWrapper.Dispose()
End Sub
以下是 ComplexPropertiesFormWrapper 类中的相关方法:
Public Sub Show()
Dim formType As Type = GetType(ManageComplexProperties(Of )).MakeGenericType(_type)
Dim _manageComplexPropertiesForm = Activator.CreateInstance(formType, _
New Object() {_value, _valueIsList, Nothing, _unitOfWork})
'ERROR OCCURS ON THE FOLLOWING LINE
_result = _manageComplexPropertiesForm.ShowDialog(Me)
If _result = DialogResult.OK Then
_resultValue = _manageComplexPropertiesForm.GetResult()
End If
End Sub
Public Sub Dispose()
_manageComplexPropertiesForm.Dispose()
End Sub
部分代码缺失,但都与表单和类的操作有关,因此不会由该问题引起。
我花了一些时间搜索,在主题栏上找不到太多关于IntPtr
窗口和控件句柄的引用,这似乎不能描述我的问题。
有没有人有解决这个问题的方法,和/或解释为什么会发生?
欢迎在 VB 或 C# 中回答。