温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Resize TableLayoutPanel when adjacent control is resized
.net c# user-interface winforms

c# - 调整相邻控件的大小时,调整TableLayoutPanel的大小

发布于 2020-06-02 14:13:58

WinForms应用程序。其中一种形式包括一个MenuStrip,一个LabelProgressBar位于其下方的自定义控件,以及一个TableLayoutPanel位于其下方的自定义控件

程序运行时,的大小LabelProgressBar会更改。TableLayoutPanel调整大小时应当扩大或收缩。因此,如果将的高度LabelProgressBar降低为零,则看起来TableLayoutPanel和的内容就在的正下方MenuStrip

在此处输入图片说明

如果有帮助,可以包含屏幕截图。

因此,已经进行了各种尝试以进行适当的控制的各种码头和锚固装置,但是都没有导致所需的行为。

查看更多

提问者
Al2110
被浏览
29
gnud 2020-03-18 07:15

这与两个面板完美配合-一个面板位于顶部,带有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();