概要: VC#を使わずにC#のWinFormsでTableLayoutPanelを用いて余白を持ったコントロールの配置がしたい。 例えば「YES」ボタンと「NO」ボタンを配置して「YES」が非表示になっても「NO」の位置が右にズレないようにしたい。
VC#を使わずにWinFormsのサンプルを作って学んでいます。
TableLayoutPanelで所々余白を維持したまま表示することは可能でしょうか?
たとえば 1×3の状態で、{ 40%, 20%, 40% } とかのように中央に余白がある状態にしたいのです。
もちろん実際には 一個目のやつを余白、二個目・三個目でボタン等を表示するのような感じで中央以外の部分になっているかもしれません。
(あくまで例として)
ですが、Buttonを3つ用意し、二個目を非表示にすると三個目のやつが左に寄ってしまいます。
イメージとしてはストップウォッチのように「開始」ボタンが押されたときに「開始」ボタンを非表示にしても
「一時停止」ボタンはその位置で固定されている状態のような感じでしょうか。
TableLayoutPanelを使う以上、できればWinAPI風のX軸やY軸等の数値ではなく、
DockStyle.FillまたはAnchorStyleのやつで自動的にコントロールのサイズが再計算される方が望ましいのですが…
C#
1// MainForm.cs 2 3using System; 4using System.Drawing; 5using System.Windows.Forms; 6 7namespace Sample{ 8 namespace Forms{ 9 class MainForm : Form{ 10 public MainForm( String[] args ){ 11 12 var tableLayoutPanel1 = new TableLayoutPanel(); 13 tableLayoutPanel1.ColumnCount = 3; 14 tableLayoutPanel1.RowCount = 1; 15 tableLayoutPanel1.Dock = DockStyle.Fill; 16 this.Controls.Add( tableLayoutPanel1 ); 17 18 var button1 = new Button(); 19 button1.Dock = DockStyle.Fill; 20 button1.Text = "button1(&B)"; 21 22 // イベント設定 23 //button1.Click += button1_Click; 24 25 tableLayoutPanel1.Controls.Add( button1 ); 26 27 var dummyButton = new Button(); 28 dummyButton.Text = "dummy"; 29 dummyButton.Dock = DockStyle.Fill; 30 dummyButton.Visible = false; 31 tableLayoutPanel1.Controls.Add( dummyButton ); 32 33 var button2 = new Button(); 34 button2.Dock = DockStyle.Fill; 35 button2.Text = "button2(&C)"; 36 37 tableLayoutPanel1.ColumnStyles.Add( new ColumnStyle( SizeType.Percent, 50F ) ); 38 tableLayoutPanel1.ColumnStyles.Add( new ColumnStyle( SizeType.Percent, 20F ) ); 39 tableLayoutPanel1.ColumnStyles.Add( new ColumnStyle( SizeType.Percent, 30F ) ); 40 41 // イベント設定 42 //button1.Click += button1_Click; 43 44 tableLayoutPanel1.Controls.Add( button2 ); 45 } 46 47 private void button1_Click( object sender, System.EventArgs e ){ 48 MessageBox.Show( "button1が押された" ); 49 } 50 } 51 } 52}
C#
1// main.cs 2 3using System; 4using System.Windows.Forms; 5 6using Sample.Forms; 7 8namespace Sample{ 9 class EntryPoint{ 10 [STAThread] 11 static void Main( string[] args ){ 12 try{ 13 Application.Run( new MainForm( args ) ); 14 }catch( System.Exception err ){ 15 MessageBox.Show( err.Message ); 16 } 17 } 18 } 19}
イメージとしてはサイズが違いますが、以下の画像のようにしたいのです。
ただし、前提としてVisual Studio C#を使わずに*組んでいます。
[情報]
言語: C#
.NET: .NET5 ( 5.0.201 )
VS: Visual Studio C#は使わない (訳があってインストールすらできない)

回答1件
あなたの回答
tips
プレビュー