调整相邻控件大小时调整 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内的控件为啥不自动调整

C#,实现窗口大小改变时窗口内的控件自动调整位置和大小时,groupbox内的控件为啥不自动调整??求解

WPF:调整图像大小,但仅在用户调整UI大小时

避免在调整大小时移动其控件的对话框上闪烁

调整窗口大小时,公共控件未正确绘制

调整大小时隐藏的组合框