【问题标题】:Reset size of a control to its default将控件的大小重置为其默认值
【发布时间】:2012-11-28 15:46:49
【问题描述】:

如何在 Windows 窗体中将控件的大小重置为其默认值?

我尝试将尺寸设置为 (-1,-1),但这不起作用,尽管高度已设置为默认值。

【问题讨论】:

  • @ArsenMkrt 您第一次创建它时的大小。
  • 您是否尝试在加载时保存它,并在您想要重置时重新分配?
  • No 没有在加载时保存它。我有几个这样的控件,想利用默认大小来重置它们的大小。

标签: c# .net winforms size controls


【解决方案1】:

您可以使用反射来获取控件的DefaultSize 属性。

Size GetDefaultSize(Control ctrl)
{
    PropertyInfo pi = ctrl.GetType().GetProperty("DefaultSize", BindingFlags.NonPublic | BindingFlags.Instance);
    return (Size)pi.GetValue(ctrl, null);
}

myCtrl.Size = GetDefaultSize(myCtrl);

MSDN

DefaultSize 属性表示控件的大小 最初创建的。

【讨论】:

  • DefaultSize 是受保护的属性。
  • @LarsTech 更新了使用反射的答案。
【解决方案2】:

我修改了后续代码,现在可以工作了。

public struct myControl
{
    public string name;
    public Size size;
}

List<myControl> lstControlSize = new List<myControl>();
myControl defControl = new myControl();

public Form1()
{
    InitializeComponent();
    SaveAllControls();
}

public void SaveAllControls()
{
    foreach (Control defaultControl in this.Controls)
    {
        if (defaultControl != null)
        {
            defControl.name = defaultControl.Name;
            defControl.size = defaultControl.Size;
            this.lstControlSize.Add(defControl);
        }
    }
}

public void ResetSizeAllControls()
{
    foreach (myControl defaultControl in this.lstControlSize)
    {
        foreach (Control resizeControl in this.Controls)
        {
            if (resizeControl != null)
            {
                if (resizeControl.Name == defaultControl.name)
                {
                    resizeControl.Size = defaultControl.size;
                    break;
                }
            }
        }
    }
}

【讨论】:

  • 这不起作用,因为您正在保存对控件的引用,而不是捕获大小。此外,您是在调用 InitializeComponent() 之后这样做的,其中大小无论如何都会更改。
  • SaveAllControls() 会将表单上的所有控件以及控件的大小保存到集合中。当 ResetSizeAllControls() 被调用时,表单上所有控件的大小都将替换为集合中的默认控件大小。
  • 我没试过,我的假设:在表单激活之后(在执行InitializeComponent()之后)改变控件的大小。
  • (1) 期间 InitializeComponent() 更改大小,(2) 这一点都不重要,因为您只是保存对控件的引用。您可以在 InitializeComponent() 之前保存控件的 Size(这是一个结构 - 因此是一个值类型),这可能会起作用。
  • 你说得对,我修改了上面的代码。谢谢你的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
相关资源
最近更新 更多