首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调整窗体大小时动态调整WinForms控件的大小

调整窗体大小时动态调整WinForms控件的大小
EN

Stack Overflow用户
提问于 2022-02-07 13:24:46
回答 1查看 752关注 0票数 1

我有一个WinForms项目,我希望随着表单的尺寸调整,所有控件都按比例增长。这是表单在正常状态下的样子:正规状态形式

我尝试过根据表单上每个控件的位置将Anchor属性设置为它们的适当值,虽然它确实移动了控件,但它们的大小保持不变。我尝试使用AutoSize属性,但也没有效果。下面是使用Anchor属性集最大化表单后的样子:最大化形式

我还尝试使用肖恩·哈尔沃森中的一个公式来动态调整所有控件的大小,但是它没有正确地重新定位控件,而且我似乎也找不出原因。下面是我用来动态调整大小的代码:

代码语言:javascript
运行
复制
        private void Main_Load(object sender, EventArgs e)
        {
            originalFormSize = new Rectangle(this.Location.X, this.Location.Y, this.Size.Width, this.Size.Height);
            submitBtnOriginal = new Rectangle(submitButton.Location.X, submitButton.Location.Y, submitButton.Width, submitButton.Height);
        }
        private void Main_Resize(object sender, EventArgs e)
        {
            resizeControl(submitBtnOriginal, submitButton);
        }

        private void resizeControl(Rectangle r, Control c)
        {
            float xRatio = (float)(this.Width) / (float)(originalFormSize.Width);
            float yRatio = (float)(this.Height) / (float)(originalFormSize.Height);

            int newWidth = (int)(r.Width * xRatio);
            int newHeight = (int)(r.Height * yRatio);

            int newX = (int)(r.Width * xRatio);
            int newY = (int)(r.Height * yRatio);  

            c.Location = new Point(newX, newY);
            c.Size = new Size(newWidth, newHeight);
        }

当我运行这段代码时,它会将按钮移动到窗体的另一个角落,但它正确地调整了它的大小。

这显然是相当多余的,因为我必须为我想要调整大小的每个控件获得一个原始大小,但是如果我能够动态调整大小来工作的话,我会很好。我感到惊讶的是,这不是一个更常见的问题,除了使用AnchorDock属性之外,我几乎找不到关于这个特定主题的任何东西。我错过了什么简单的方法吗?这是一个比看起来更困难的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2022-02-08 09:56:19

将TextBox anchor属性值作为Top, Bottom, Left, Right并调整窗体的大小。那应该管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71019323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档