【问题标题】:Change form size at runtime in C#在 C# 中在运行时更改表单大小
【发布时间】:2012-10-15 09:16:33
【问题描述】:

如何在运行时更改窗体大小?

我看到了一些例子,但每个例子都需要 Form.Size 属性。这个属性可以在这里设置:http://msdn.microsoft.com/en-us/library/25w4thew.aspx#Y456, 但我已经在可视化工具中创建了我的应用程序表单,并且表单是这样创建的:

static void Main()
{
    Application.Run(new Form());
}

我现在如何设置Size 属性,然后通过Form.HeightForm.Width 方法更改它?

【问题讨论】:

  • 你想在一些事件上做吗,比如按钮点击?

标签: c# resize


【解决方案1】:

试试 this.ClientSize 而不是 this.Size:

private void Form1_Load(object sender, EventArgs e)
{
   this.ClientSize = new Size(mywidth, myheight);
}

为我工作。

【讨论】:

    【解决方案2】:

    作为对上述答案的补充;不要忘记 Form MinimumSize 属性,以防您需要创建更小的表单。

    示例如下:

    private void SetDefaultWindowSize()
    {
       int sizeW, sizeH;
       sizeW = 180;
       sizeH = 100;
    
       var size = new Size(sizeW, sizeH);
    
       Size = size;
       MinimumSize = size;
    }
    
    private void SetNewSize()
    {
       Size = new Size(Width, 10);
    }
    

    【讨论】:

      【解决方案3】:

      这样的东西对我来说很好用:

      public partial class Form1 : Form
      {
          Form mainFormHandler;
      ...
      }
      
      private void Form1_Load(object sender, EventArgs e){
          mainFormHandler = Application.OpenForms[0];
         //or instead use this one:
         //mainFormHandler = Application.OpenForms["Form1"];
      }
      

      然后你可以改变大小如下:

      mainFormHandler.Width = 600;
      mainFormHandler.Height= 400;
      

      mainFormHandler.Size = new Size(600, 400);
      

      另一个有用的一点是,如果你想从另一个Form改变mainForm的大小,你可以简单地使用Property来设置大小。

      【讨论】:

        【解决方案4】:

        如果您想以编程方式操作表单,最简单的解决方案是保留对它的引用:

        static Form myForm;
        
        static void Main()
        {
            myForm = new Form();
            Application.Run(myForm);
        }
        

        然后,您可以在运行时使用它来更改大小(或您想做的其他任何事情)。虽然Arrow points out 不能直接设置WidthHeight,但必须设置Size 属性。

        【讨论】:

          【解决方案5】:

          您可以在要更改大小的地方执行以下操作来更改表单的高度(用“10”代替您的大小):

          this.Height = 10;
          

          这也可以用宽度来完成:

          this.Width = 10;
          

          【讨论】:

            【解决方案6】:

            您不能更改 Form 的 Width 和 Height 属性,因为它们是只读的。您可以像这样更改表单的大小:

            button1_Click(object sender, EventArgs e)
            {
                // This will change the Form's Width and Height, respectively.
                this.Size = new Size(420, 200);
            }
            

            【讨论】:

            • 如果您想在调整大小后重新定位表单,只需 this.CenterToScreen();
            • 非常感谢,很受启发。虽然我仍然不明白,但为什么 Microsoft® 更改 Window 属性不像使用控件那样简单……
            • 我发现如果我在设计器的表单上设置了 MinimumSize 和 MaximumSize 属性,那么设置 Size 属性根本不会改变任何东西......所以请确保这两个属性不是设置。
            • 你能限定这个答案吗?例如。那么其他可能会或可能不会阻止它产生任何影响的依赖项呢,比如属性MaximumSizeMinimumSizeAutoSizeMode(例如可以设置为“GrowOnly”)、AutoSizeFormBorderStyle(即例如可以设置为“FixedDialog”)和WindowState(例如可以设置为“最大化”)。
            【解决方案7】:

            为了调用它,您必须存储对表单的引用并将引用传递给 run 方法。然后你可以在 actionhandler 中调用它。

            public partial class Form1 : Form
            {
                public void ChangeSize(int width, int height)
                {
                    this.Size = new Size(width, height);
                }
            }
            

            【讨论】:

            • 这对我来说不会改变表单的大小。
            • @MoxShah 你需要更具体,也许问你自己的问题。检查调试器,是否到达方法调用?当你走进去会发生什么?也许您还需要对表单进行重绘。好久没用这个东西了。
            • @MeFox,我正在使用 MetroForm 控件,在其调整大小事件中,我正在更改它的大小,但它不起作用。当我说它不起作用时,意味着它执行了那个特定的语句,但它的值没有改变。
            • 边框样式固定了吗? stackoverflow.com/questions/5416380/…我从来没有使用过 MetroForm,所以我不能再帮你了。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-03-05
            • 1970-01-01
            • 1970-01-01
            • 2012-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多