C# 如何在表单展开时自动移动和调整按钮和标签的大小?

C# 如何在表单展开时自动移动和调整按钮和标签的大小?,c#,winforms,visual-studio-2015,C#,Winforms,Visual Studio 2015,因此,我正在使用一个表单应用程序,其中包含按钮和标签(),我想知道如何在最大化表单时正确调整它们的大小。这些问题中的锚点或/和停靠属性:或不起作用,因为它仅扩展1项 我需要它在不超出原始比例的情况下移动和调整大小。比如说我有两个按钮在上面。我希望它们始终保持在右侧,每个10*12像素,距边缘2像素。当我将原始窗口大小扩展三次时,每个按钮与边缘的距离仍为2像素,但大小为30*36像素。您需要在窗体上的每个控件上设置锚属性。请注意,如果锚定两个相对的边,控件将被拉伸/挤压,但如果仅锚定到一侧,控件将

因此,我正在使用一个表单应用程序,其中包含按钮和标签(),我想知道如何在最大化表单时正确调整它们的大小。这些问题中的锚点或/和停靠属性:或不起作用,因为它仅扩展1项


我需要它在不超出原始比例的情况下移动和调整大小。比如说我有两个按钮在上面。我希望它们始终保持在右侧,每个10*12像素,距边缘2像素。当我将原始窗口大小扩展三次时,每个按钮与边缘的距离仍为2像素,但大小为30*36像素。

您需要在窗体上的每个控件上设置锚属性。请注意,如果锚定两个相对的边,控件将被拉伸/挤压,但如果仅锚定到一侧,控件将移动

请注意,Winforms应用程序的所有控件都按比例调整大小不是正常行为-您选择需要拉伸的控件(面板、树视图、图像、列表框等),然后标准控件(输入、按钮、下拉列表等)应保持相同的大小,但移动(即定位到顶部和/或右侧)


如果你试图为你的应用程序执行某种“kiosk模式”,那么你通常会以较低的分辨率和/或较高的DPI运行,以获得成比例的大小调整效果,只要你在表单中应用了惯用的锚定样式,就不需要对应用程序进行更改。

你可以将按钮,etc在一个
表格布局面板
中,包含一列和多行(要放置的元素数量)。将tableLayout的锚点设置为“顶部”和“底部”。然后在每行中放置一个按钮/标签

使用百分比值定义每行大小:

tableLayoutPanel1.RowStyles[i].SizeType = SizeType.Percent;
tableLayoutPanel1.RowStyles[i].Height = 20.0F; //=20%

最后,将每个元素的定位也设置为“顶部”和“底部”。

这是12个按钮(4x3)的示例代码。与按钮大小相比,它还会更改字体大小

  • 打开windows窗体
  • 创建12个按钮
  • 使用以下代码:

    公共表格1() { 初始化组件(); SetComponents(); }


  • OnResize
    中编写您自己的代码即使我知道OnResize,但我不知道如何使其完全动态。好的,我建议您保留原始布局信息,每次都从头开始计算。您还将使用锚定信息来决定要计算的内容。您可以尝试在控件的标记属性中保存原始大小。是的,确实如此。如果向左和向右定位,它将通过水平拉伸来调整大小。如果锚定到顶部和底部,它将通过垂直拉伸来调整大小。您可以锚定到顶部、底部、左侧和右侧的任意组合,以获得所需内容。如果这对您不起作用,我可能无法理解您的需求,因为在我多年使用WinForms的过程中,锚定功能始终足以满足我的需求。
    void SetComponents()
    {
        foreach (Control item in Controls)
        {
            if (item is Button)
            {
                item.Width = Size.Width / 4 - 16;
                item.Height = Size.Height / 4;
                item.Font = new Font(Font.FontFamily, item.Height / 5);
            }
    
            button1.Left = 10;
            button1.Top = 10;
    
            button2.Left = button1.Right + 10;
            button2.Top = button1.Top;
    
            button3.Left = button2.Right + 10;
            button3.Top = button2.Top;
    
            button4.Left = button3.Right + 10;
            button4.Top = button3.Top;
    
            button5.Left = button1.Left;
            button5.Top = button1.Bottom + 10;
    
            button6.Left = button5.Right + 10;
            button6.Top = button2.Bottom + 10;
    
            button7.Left = button6.Right + 10;
            button7.Top = button3.Bottom + 10;
    
            button8.Left = button7.Right + 10;
            button8.Top = button4.Bottom + 10;
    
            button9.Left = button1.Left;
            button9.Top = button5.Bottom + 10;
    
            button10.Left = button9.Right + 10;
            button10.Top = button6.Bottom + 10;
    
            button11.Left = button10.Right + 10;
            button11.Top = button7.Bottom + 10;
    
            button12.Left = button11.Right + 10;
            button12.Top = button8.Bottom + 10;
    
        }
    }
    
    private void Form1_Resize(object sender, EventArgs e)
    {
        SetComponents();
    }