C#winform动态控件大小调整

时间:2011-07-04 18:25:44

标签: c# winforms

无论用户使用什么屏幕分辨率,我都希望我的winform app控件位于特定位置和特定大小。

有人能给我一个简单的例子,告诉我如何将面板的形状从屏幕上的60%开始缩小到屏幕上的100%,并成为屏幕的全长?

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

谢谢!

如果分辨率为800X600或1024X760,我想要相同的百分比。

3 个答案:

答案 0 :(得分:2)

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

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);

因此,如果你想在label1中强制例如 Form1表现得像你在帖子中写的那样,那么可能就是这样:

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));
}

答案 1 :(得分:2)

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

如果您希望表单相对于屏幕保持“相同大小”,则需要将其保持可调整大小并在启动时读取屏幕大小并设置表单的“位置”和“大小”属性,以便它使用相对你想要的屏幕区域。

答案 2 :(得分:0)

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

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

您可以使用此对象属性设置面板的顶部。但是我必须注意到,如果你的面板是另一种形式,那么Top&它的左侧属性明显与包含形式有关。