この問題に関する多くの投稿があることは知っていますが、これを解決できません。
私は vb.NET Form ベースのアプリケーションに取り組んでいます。Tabcontrol にコントロールを追加しようとしています。tabcontrol に追加するコントロールは別のプロジェクトにあります。Tabcontrol はサード パーティ (Infragistics) コントロールであり、いくつかの追加機能を備えた .NET Tabcontrol と同じです。以下は、Tabcontrol にコントロールを追加するコード行です。
fViewerForm.DocumentViewer1.ThumbnailPane.TabControl.Tabs(tnp_PageTab_ID).TabPage.Controls.Add(fViewerForm.DocumentViewer1.ThumbnailPane.TNViewer1.TNImage(0))
コントロールTnImage(0)は userControl であり、別のプロジェクトにあります。次のエラーが表示されます: 「あるスレッドで作成されたコントロールは、別のスレッドのコントロールの親にすることはできません。」
いくつかの投稿を行った後、Invokeメソッドを使用してこの種の問題を解決できることがわかりました。だから私は自分のコードを変更しました:
fViewerForm.DocumentViewer1.ThumbnailPane.AddControlToTabControl(tnp_PageTab_ID, fViewerForm.DocumentViewer1.ThumbnailPane.TNViewer1.TNImage(0))
Delegate Sub AddControlToTabControlCallback(ByVal key As String, ByVal tnimage As UeWIImageX.UeWIImage)
Public Sub AddControlToTabControl(ByVal key As String, ByVal tnimage As UeWIImageX.UeWIImage)
' Calling from another thread? -> Use delegate.
If Me.TabControl1.InvokeRequired Then
Dim d As New AddControlToTabControlCallback(AddressOf AddControlToTabControl)
' Execute delegate in the UI thread, pass args as an array.
Me.TabControl1.Invoke(d, New Object() {key, tnimage})
Else ' Same thread.
Me.TabControl1.Tabs(key).TabPage.Controls.Add(tnimage)
End If
End Sub
その後も同じエラーが発生しています。AddControlToTabControlメソッドで同じコントロールを作成すると、そのコントロールをTabcontrolに追加できます。以下はコードです:
Public Sub AddControlToTabControl(ByVal key As String, ByVal tnimage As UeWIImageX.UeWIImage)
' Calling from another thread? -> Use delegate.
If Me.TabControl1.InvokeRequired Then
Dim d As New AddControlToTabControlCallback(AddressOf AddControlToTabControl)
' Execute delegate in the UI thread, pass args as an array.
Me.TabControl1.Invoke(d, New Object() {key, tnimage})
Else ' Same thread.
Dim uewimg As New UeWIImageX.UeWIImage ' creating the same control as tnimage.
uewimg = tnimage
Me.TabControl1.Tabs(key).TabPage.Controls.Add(uewimg) 'able to add this control to the tabcontrol.
End If
End Sub
TnImageコントロールにInvoke メソッドを使用して、それを Tabcontrol に追加するにはどうすればよいですか。誰か助けてください。