質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

1回答

1531閲覧

WinFormsのTableLayoutPanelで余白を維持したい

BeatStar

総合スコア4958

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2022/03/05 07:49

編集2022/03/05 07:51
概要: 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#は使わない (訳があってインストールすらできない)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/03/07 02:51

> .NET: .NET5 ( 5.0.201 ) ではなくて, .NET Framework 4.5.X とか 4.6.X とかを使っている場合, TableLayoutPanelの列をパーセント設定にしてればその幅は内容物に依存しないのですが (質問文の話は,列の設定が AutoSize になっているときの振る舞いのように思える), .NETだと違うということなのでしょうか? (あるいは質問文で妙に強調されている「VSを使わない」が何かしらそういうことを生じる要因だという話?)
guest

回答1

0

ベストアンサー

TableLayoutPanelにButtonを直接追加するのではなくPanelを追加して、ButtonはそのPanelに追加すればいいのではないでしょうか。
そうすれば、Buttonを非表示にしてもPanelは表示されているためレイアウトは維持されると思います。

投稿2022/03/05 08:29

YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2022/03/05 08:54

ご回答ありがとうございます。できました! 確かにPanelを別途用意して張り付ければいいだけでした…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問