簡體   English   中英

使用TableLayoutPanel的可擴展列(來自代碼)

[英]Expandable column using TableLayoutPanel (from code)

我正在嘗試使3列TableLayoutPanel的中間列可擴展。 我從代碼而不是設計師那里做的一切都是學習練習。

中間列有一個文本框,左右列各有一個按鈕:

在此輸入圖像描述

從截圖中可以看出,第二列尚未展開。

我正在遵循https://stackoverflow.com/a/22283690/492336的建議 - 我將TextBox控件的Dock設置為Fill,並將面板的Dock設置為Fill:

var panel = new TableLayoutPanel();
panel.RowCount = 1;
panel.ColumnCount = 3;
panel.Controls.Add(new Button());
panel.Controls.Add(new TextBox());
panel.Controls.Add(new Button());
panel.Controls[0].Text = "Button1";
panel.Controls[2].Text = "Button2";
panel.Controls[1].Dock = DockStyle.Fill;
panel.Dock = DockStyle.Fill;

我還通過將列設置為AutoSize嘗試了https://stackoverflow.com/a/7279996/492336中的建議:

panel.ColumnStyles.Clear();
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));

但這也沒有效果。

我在這做錯了什么?

如果您希望中間列展開並占用TableLayoutPanel所有剩余空間,請在控件上執行以下設置:

  • 將第一個和最后一個列樣式設置為AutoSize
  • 將中間列樣式設置為Percent ,值為100
  • TextBoxDock屬性設置為Fill

這樣,中間列將展開以填充TableLayoutPanel剩余空間。 現在,如果您希望TableLayoutPanel占用Form所有寬度,您可以將其Dock屬性設置為FillTop 你也可以把它做大,並設置合適的Anchor ,以便根據Form大小改變它的大小。

var panel = new TableLayoutPanel();
panel.RowCount = 1;
panel.ColumnCount = 3;
panel.Controls.Add(new Button());
panel.Controls.Add(new TextBox());
panel.Controls.Add(new Button());
panel.Controls[0].Text = "Button1";
panel.Controls[2].Text = "Button2";
panel.Controls[1].Dock = DockStyle.Fill;
panel.Dock = DockStyle.Fill;

panel.ColumnStyles.Clear();
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100)); // This is the changed part
panel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM