データグリッドセル内のボタンクリックから汎用フォームを開く次のコードを使用しています。これは数か月間うまく機能していますが、同じコードを別のフォームに実装する必要があるため、コードの繰り返しを節約するために、これを処理するラッパー クラスを作成し、必要に応じてこのクラスのインスタンスを作成することにしました。'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
2 番目の実装 (上記のエラーが発生します):
上記の変更されたイベント ハンドラーを次に示します。
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# での回答を歓迎します。