53

我注意到一些应用程序会更改它们的控件位置以尽可能多地调整它们的分辨率,如果窗口最大化,它们会以这样一种方式设置自己,以使所有 GUI 看起来都是平衡的。我的问题是是否可以在 Visual Studio 2010 C# 中制作或实现此功能?

4

10 回答 10

72

使用DockAnchor属性。 是一篇好文章。请注意,这些将在最大化/最小化时处理更改。如果屏幕分辨率发生变化,这有点不同,但它会遵循相同的想法。

于 2010-11-22T18:12:58.523 回答
27

使用这些组合来获得所需的结果:

  1. Anchor属性设置为无,控件不会调整大小,它们只会移动位置。

  2. Anchor属性设置为 Top+Bottom+Left+Right,控件将被调整大小但它们不会改变它们的位置。

  3. Minimum Size表单的 设置为适当的值。

  4. 设置Dock属性。

  5. 使用Form Resize事件来改变你想要的任何东西

我不知道字体大小(标签、文本框、组合框等)在(1)-(4)中会受到怎样的影响,但可以在(5)中进行控制。

于 2014-11-25T10:28:14.627 回答
10
float widthRatio = Screen.PrimaryScreen.Bounds.Width / 1280;
float heightRatio = Screen.PrimaryScreen.Bounds.Height / 800f;
SizeF scale = new SizeF(widthRatio, heightRatio);
this.Scale(scale);
foreach (Control control in this.Controls)
{
control.Font = new Font("Verdana", control.Font.SizeInPoints * heightRatio * widthRatio);
}
于 2012-09-16T07:15:07.430 回答
2

..并检测分辨率的变化来处理它(一旦你像 SwDevMan81 建议的那样使用对接和锚定)使用Microsoft.Win32中的SystemEvents.DisplaySettingsChanged 事件

于 2010-11-23T07:45:12.073 回答
0

抱歉,我看到这个问题晚了,这是一个简单的编程解决方案,对我很有效,

创建这些全局变量:

 float firstWidth;
 float firstHeight;

加载后,填写这些变量;

 firstWidth = this.Size.Width;
 firstHeight = this.Size.Height;

然后选择您的表单并将这些代码放入表单的 SizeChange 事件;

 private void AnaMenu_SizeChanged(object sender, EventArgs e)
    {
        

        float size1 = this.Size.Width /  firstWidth;
        float size2 = this.Size.Height / firstHeight;

            SizeF scale = new SizeF(size1, size2);
        firstWidth = this.Size.Width;
        firstHeight = this.Size.Height;

        foreach (Control control in this.Controls)
        {
                
            control.Font = new Font(control.Font.FontFamily, control.Font.Size* ((size1+ size2)/2));
            
            control.Scale(scale);
                

        }


    }

我希望这会有所帮助,它适用于我的项目。

于 2020-08-25T12:12:17.783 回答
0

在这里,我喜欢使用https://www.netresize.net/index.php?c=3a&id=11#buyopt。但它是付费版本。

如果您购买 1 Site License (Unlimited Developers),您也可以获得他们的源代码。

我如何找到 nuget 包解决方案。

于 2019-08-08T07:09:23.660 回答
-1

在表单加载事件中添加这一行

this.WindowState = FormWindowState.Maximized;
于 2013-06-14T09:28:13.950 回答
-1

在页面加载时为所有控件添加此代码或在容器中添加所有控件

int x;
Point pt = new Point();
x = Screen.PrimaryScreen.WorkingArea.Width - 1024;
x = x / 2;
pt.Y = groupBox1.Location.Y + 50;
pt.X = groupBox1.Location.X + x;
groupBox1.Location = pt;
于 2013-02-04T12:48:27.753 回答
-2
private void MainForm_Load( object sender, EventArgs e ) 
     { 
        this.Size = Screen.PrimaryScreen.WorkingArea.Size 
     }
于 2015-02-26T02:08:54.187 回答
-5
this.WindowState = FormWindowState.Maximized;
于 2016-09-29T13:13:27.840 回答