Winforms フォーム オブジェクトをタブ コントロールを含むメイン フォームに渡して、メイン フォームにこのフォーム オブジェクトをタブの 1 つにロードさせる方法はありますか?
追加の問題: フォーム オブジェクトは、メイン フォームとは異なるスレッドからインスタンス化されます。
Winforms フォーム オブジェクトをタブ コントロールを含むメイン フォームに渡して、メイン フォームにこのフォーム オブジェクトをタブの 1 つにロードさせる方法はありますか?
追加の問題: フォーム オブジェクトは、メイン フォームとは異なるスレッドからインスタンス化されます。
フォームが異なるスレッドで作成されている場合は機能しないと思いますが、通常はフォームの TopLevel プロパティを False に設定してからタブ ページ コントロール (またはその他の親コントロール) に追加することでこれを行います。
編集: フォームはデフォルトで非表示になっているため、Visible プロパティを True に設定する必要もあります。
また、これを試したところ、別のスレッドから作成されたボタンのようなものでも機能します。しかし、フォームで実行すると、InvalidOperationException が発生しました。
Multi Document Interface (MDI) タブ ページのブラウジングのようなものが必要ですか?
のコレクションAdd
から呼び出すだけでよいはずです。コントロールがサーフェス全体を埋めるように、それに応じておよびプロパティを設定することをお勧めします (それが必要であると仮定します)。Controls
TabPage
Anchor
Dock
ただし、別のスレッドからコントロールを作成することは良い方法ではないと思います。適切な同期メカニズムなどを使用する限り、このハンドオフをスレッドセーフにすることができると確信しています。ただし、すべての UI 要素にはスレッド アフィニティがあります。つまり、UI 要素が作成されると、それは作成スレッドに属します。単純な作成 (コンストラクター呼び出しのみ) では問題はないかもしれませんが、UI スレッドですべてのUI 要素ロジックを文字通りかつ厳密に保持するという規則を採用しています。