1

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

4

2 に答える 2