如何按比例调整表单大小?C#.

本文关键字:表单 按比例 调整 | 更新日期: 2023-09-27 18:31:35

我需要在我的表单中宽度是高度的两倍 (1:2) 当我调整大小时我该怎么做?感谢您的帮助,对不起我的英语:)

如何按比例调整表单大小?C#.

看看这篇文章:在保持纵横比的同时调整表单大小。

关键是响应WM_SIZING消息,它允许您更改窗口矩形。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        // Necessary to take the window frame width/height into account
        this.chromeWidth = this.Width - this.ClientSize.Width;
        this.chromeHeight = this.Height - this.ClientSize.Height;
        this.ClientSize = new System.Drawing.Size(400, 200);
    }
    // ...
    #region Resizer
    private float constantWidth = 2;
    private float constantHeight = 1;
    private int chromeWidth;
    private int chromeHeight;
    // From Windows SDK
    private const int WM_SIZING = 0x214;
    private const int WMSZ_LEFT = 1;
    private const int WMSZ_RIGHT = 2;
    private const int WMSZ_TOP = 3;
    private const int WMSZ_BOTTOM = 6;
    struct RECT
    {
        public int Left;
        public int Top;
        public int Right;
        public int Bottom;
    }
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_SIZING)
        {
            RECT rc = (RECT)Marshal.PtrToStructure(m.LParam, typeof(RECT));
            int w = rc.Right - rc.Left - chromeWidth;
            int h = rc.Bottom - rc.Top - chromeHeight;
            switch (m.WParam.ToInt32()) // Resize handle
            {
                case WMSZ_LEFT:
                case WMSZ_RIGHT:
                    // Left or right handles, adjust height
                    rc.Bottom = rc.Top + chromeHeight + (int)(constantHeight * w / constantWidth);
                    break;
                case WMSZ_TOP:
                case WMSZ_BOTTOM:
                    // Top or bottom handles, adjust width
                    rc.Right = rc.Left + chromeWidth + (int)(constantWidth * h / constantHeight);
                    break;
                case WMSZ_LEFT + WMSZ_TOP:
                case WMSZ_LEFT + WMSZ_BOTTOM:
                    // Top-left or bottom-left handles, adjust width
                    rc.Left = rc.Right - chromeWidth - (int)(constantWidth * h / constantHeight);
                    break;
                case WMSZ_RIGHT + WMSZ_TOP:
                    // Top-right handle, adjust height
                    rc.Top = rc.Bottom - chromeHeight - (int)(constantHeight * w / constantWidth);
                    break;
                case WMSZ_RIGHT + WMSZ_BOTTOM:
                    // Bottom-right handle, adjust height
                    rc.Bottom = rc.Top + chromeHeight + (int)(constantHeight * w / constantWidth);
                    break;
            }
            Marshal.StructureToPtr(rc, m.LParam, true);
        }
        base.WndProc(ref m);
    }
    #endregion
}

使用 TableLayoutControl 来承载其他控件。这类似于 HTML 表。

将控件添加到表中的单元格,然后可以添加列样式和行样式,您可以在其中设置单元格的宽度和高度。测量值可以指定为自动、绝对或百分比。百分比是您在这里真正需要的百分比。

然后,将此 TableLayoutControl 的停靠栏设置为随窗口调整大小,单元格将根据您之前设置的百分比按比例调整大小。

若要使实际组件也调整大小,必须设置其停靠或锚点属性。任何指定控件应如何相对于其所在单元格调整大小的配置都将起作用,例如,您可能希望通过将控件的 Anchor 属性设置为

AnchorStyle.Top | AnchorStyle.Bottom

简而言之:

  • 设置控件相对于其单元格的大小调整方式
  • 设置单元格相对于 TableLayoutControl 的大小调整方式(使用 ColumnStyles 和 RowStyles)
  • 设置如何根据窗体调整表布局控件的大小

更多信息可以在这里找到:http://msdn.microsoft.com/en-us/vstudio/bb798032.aspx

签出 Control.Resize 事件 -- 也

private void Form1_Resize(object sender, System.EventArgs e)
{   
    Control control = (Control)sender;
    control.Width = control.Height * 2; 
}

注册到调整大小事件并按字面意思执行以下操作:

this.ClientSize.Width = this.ClientSize.Height * 2;

或完整表单大小(包括边框)

this.Size.Width = this.Size.Height * 2;

您可以使用诸如onLoad,onClick等事件在特定条件下进行大小调整。所以基本上取决于你。

有一些标准窗体属性的高度和宽度,因此您可以调整这些属性。

例如:

private void frmMain_Load(object sender, EventArgs e)
    {
        int height = 500;
        frmMain.ActiveForm.Height = height;
        frmMain.ActiveForm.Width = height / 2;
    }

为了调整下面的表单大小是更好的

http://niravdaraniya.blogspot.in/2013/07/how-to-resize-form-in-cnet.html