【问题标题】:Resize TableLayoutPanel when adjacent control is resized调整相邻控件大小时调整 TableLayoutPanel 大小
【发布时间】:2020-06-29 01:14:38
【问题描述】:

一个 WinForms 应用程序。其中一种形式由MenuStrip、下方的自定义控件LabelProgressBar 和下方的TableLayoutPanel 组成。

程序运行时,LabelProgressBar 的大小会发生变化。 TableLayoutPanel 应在调整大小时扩展或收缩。因此,如果LabelProgressBar 的高度减小到零,它应该看起来好像TableLayoutPanel 及其内容就在MenuStrip 的正下方。

如果有帮助,可以附上屏幕截图。

因此,到目前为止,已经对各种停靠和锚点安排进行了适当的控制尝试,但都没有产生所需的行为。

【问题讨论】:

  • 为什么不把它们都放在SplitContainer中?
  • @gnud 是的,我现在正在尝试。关键是在自定义进度条控件的调整大小事件上调整SplitContainer 的大小吗?
  • 实际上,这比我对SplitContainer 的想象要困难得多,但与两个普通面板完美搭配,一个停靠在顶部,一个停靠在Fill。跨度>

标签: c# .net winforms user-interface


【解决方案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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多