いくつかの TableLayoutPanels があり、それぞれが名前/値情報のカテゴリを 2 つの列 (1 つは情報ラベル付き、もう 1 つはデータ ラベル付き) に表示します。
それぞれで、最初の列をオートサイズに設定し、すべてのラベルを右揃えにしました。これは問題なく機能します。ただし、それは (明らかに) 各 TableLayoutPanel に対して個別に機能し、次のようになります。
TableLayoutPanel 1:
+--------+--------+
| Name 1 | Data 1 |
+--------+--------+
| Name 2 | Data 2 |
+--------+--------+
| Name 3 | Data 3 |
+--------+--------+
TableLayoutPanel 2:
+------------------+--------+
| Long Name 1 | Data 1 |
+------------------+--------+
| Very Long Name 2 | Data 2 |
+------------------+--------+
| Long Name 3 | Data 3 |
+------------------+--------+
最初の列をすべて自動サイズ変更するときに、すべての名前ラベルを考慮する方法を探しているので、次のようになります。
TableLayoutPanel 1:
+------------------+--------+
| Name 1 | Data 1 |
+------------------+--------+
| Name 2 | Data 2 |
+------------------+--------+
| Name 3 | Data 3 |
+------------------+--------+
TableLayoutPanel 2:
+------------------+--------+
| Long Name 1 | Data 1 |
+------------------+--------+
| Very Long Name 2 | Data 2 |
+------------------+--------+
| Long Name 3 | Data 3 |
+------------------+--------+
すべてのデータを 1 つのテーブルにまとめることはできません。各テーブルは異なるカテゴリの情報を表し、折りたたみ可能なパネルのコレクションを含むカスタム コントロール内にあるためです (各カテゴリを個別に表示または非表示にすることができます)。
コンテナー コントロールの OnLayout() をオーバーライドし、TableLayoutPanels の最初の列をすべて自動サイズに設定し、すべての幅を取得し、最大値を見つけてから、最初の列をすべて固定サイズに設定することで、これを達成しようとしています。最大幅の。これは機能しますが、すべての列が自動サイズにジャンプしてから固定サイズに戻るため、レイアウトが発生するたびに恐ろしいように見えます。
テーブルごとに ControlAdded と ControlRemoved をフックし、子コントロールごとに SizeChanged をフックして、子コントロールのサイズがいつ変更されたかを把握し、手動で列幅を設定する必要があると想定していますが、私は '正しい幅を確実に取得する方法がわかりません。
最初の方法のバリエーションを試しました。最初の列のすべてのコントロールで GetPreferredSize() を使用して最大幅を見つけようとし、最初のすべての列を固定サイズに設定しましたが、わずかに幅が返されたように見えました。小さいに。追加の間隔を適用する必要がありますか?
実際に視覚的に適用せずに自動サイズ計算を実行するように TableLayoutPanel に依頼する方法を知っている人はいますか? それとも、テーブルに嘘をついて、特定の幅のコントロールがあると「ふり」をして、それを考慮に入れるのでしょうか? 実際のコントロールを追加することはできません。これは、コントロールにさらにセルを割り当てたいからです。ILSpy でソースを見てみましたが、まあ、きれいではありません。ほとんどの作業は、もちろん内部の TableLayout クラスによって行われているようで、私はそれが何をしているのかを理解できませんでした。
アイデアをありがとう...