C#winform动态控件大小调整

本文关键字:调整 动态控件 C#winform | 更新日期: 2023-09-27 18:01:12

无论用户使用何种屏幕分辨率,我都希望我的winform应用程序控件位于特定位置和特定大小。

有人能给我一个快速的例子,告诉我如何塑造一个面板,从屏幕上60%向下到屏幕上100%向下,并成为屏幕的全长吗?

我希望这是有道理的,所以基本上无论屏幕分辨率如何,面板都会占据winform的40%,从应用程序的60%开始。

谢谢!

无论分辨率是800X600还是1024X760,我都希望相同的%。

C#winform动态控件大小调整

您可以使用SplitContainer,它将表单划分为两个区域。如果你把它的方向改为水平,你会得到两个区域,一个从屏幕顶部开始,另一个在另一侧。现在您可以定义每个面板的最小尺寸:

SplitContainer.Panel1MinSize = Convert.ToInt32(0.6 * Form.ActiveForm.ClientSize.Height);
SplitContainer.Panel2MinSize = Convert.ToInt32(0.4 * Form.ActiveForm.ClientSize.Height);

这使得顶部面板占据60%的客户端区域,底部面板占据40%的客户端区域。它会自动在表单上启动60%。然后,您可以将任何其他想要的控件放入面板,并使用Control.Dock = DockStyle.(something) 将其固定到面板上

改变任何控件位置的另一种方法是基本上计算控件的位置和大小。您可以将客户端区域的宽度获取为Form.ClientSize.Width,并将60%向下的应用程序的起始X、Y位置获取为:

int X = 0; // Leftmost
int Y = Convert.ToInt32(0.6 * Form.ClientSize.Height); // 60% from topmost point

现在您可以将控件的大小和位置设置为:

Control.Size = new Size(Form.ClientSize.Width, Convert.ToInt32(0.4 * Form.ClientSize.Height));
Control.Location = new Point(0, Convert.ToInt32(0.6 * Form.ClientSize.Height);

因此,如果你想强迫,例如Form1中的label1表现得像你在帖子中写的那样,一种可能性是:

private void Form1_Resize(object sender, EventArgs e)
{
    label1.Size = new Size(this.ClientSize.Width, Convert.ToInt32(0.4 * this.ClientSize.Height));
    label1.Location = new Point(0, Convert.ToInt32(0.6 * this.ClientSize.Height));
}

若要使窗体保持与设计时相同的大小(以像素为单位(,请将AutoSize属性设置为false,将AutoScaleMode属性设置为None,并使用FormBorderStyle中的一个"Fixed"选项。这应该会抑制系统或用户更改表单大小的所有尝试。这意味着它将是相同的大小(以像素为单位(,但在不同的屏幕分辨率下,它可能看起来更大或更小。

如果您希望窗体相对于屏幕保持"相同大小",则需要使其保持可调整大小,并在启动时读取屏幕大小,并设置窗体的"位置"answers"大小"属性,以便它使用您所需的屏幕相对区域。

您可以使用System.Windows.Forms中名为Screen的静态类。只需将面板的宽度和高度设置如下:

panel.Height = Screen.PrimaryScreen.WorkingArea.Height;
panel.Width = Screen.PrimaryScreen.WorkingArea.Width * 40 / 100;

您可以使用此对象属性设置面板的顶部。但我必须注意到,如果你的小组是另一种形式;它的左性质显然和包含形式有关。