调整相邻控件大小时调整 TableLayoutPanel 大小
Posted
技术标签:
【中文标题】调整相邻控件大小时调整 TableLayoutPanel 大小【英文标题】:Resize TableLayoutPanel when adjacent control is resized 【发布时间】:2020-06-29 01:14:38 【问题描述】:一个 WinForms 应用程序。其中一种形式由MenuStrip
、下方的自定义控件LabelProgressBar
和下方的TableLayoutPanel
组成。
程序运行时,LabelProgressBar
的大小会发生变化。 TableLayoutPanel
应在调整大小时扩展或收缩。因此,如果LabelProgressBar
的高度减小到零,它应该看起来好像TableLayoutPanel
及其内容就在MenuStrip
的正下方。
如果有帮助,可以附上屏幕截图。
因此,到目前为止,已经对各种停靠和锚点安排进行了适当的控制尝试,但都没有产生所需的行为。
【问题讨论】:
为什么不把它们都放在SplitContainer
中?
@gnud 是的,我现在正在尝试。关键是在自定义进度条控件的调整大小事件上调整SplitContainer
的大小吗?
实际上,这比我对SplitContainer
的想象要困难得多,但与两个普通面板完美搭配,一个停靠在顶部,一个停靠在Fill
。跨度>
【参考方案1】:
这与两个面板完美配合 - 一个用于顶部,DockStyle.Top
,“主”一个与DockStyle.Fill
。
您可以尝试将自定义控件包装在面板中并尝试锚定或Fill
'ing,如果它不能正确停靠在顶部。
var form = new Form();
var shrinking = new Panel()
BackColor = Color.Red,
Dock = DockStyle.Top
;
var filling = new TableLayoutPanel()
BackColor = Color.Green,
Dock = DockStyle.Fill
;
var timer = new System.Windows.Forms.Timer();
timer.Interval = 500;
timer.Tick += (s, a) =>
shrinking.Height -= 10;
if(shrinking.Height <= 0)
shrinking.Height = 0;
timer.Stop();
;
form.Shown += (s, a) => timer.Start();
// Just to make sure it works with a menu present
var menu = new MenuStrip();
menu.Items.Add("&File");
form.Controls.Add(shrinking);
form.Controls.Add(filling);
form.Controls.Add(menu);
form.ShowDialog();
【讨论】:
以上是关于调整相邻控件大小时调整 TableLayoutPanel 大小的主要内容,如果未能解决你的问题,请参考以下文章
C#,实现窗口大小改变时窗口内的控件自动调整位置和大小时,groupbox内的控件为啥不自动调整