gpt4 book ai didi

winforms - 设置某些属性时,Designer 会自动重新调整表单大小

转载 作者:行者123 更新时间:2023-12-03 23:30:55 25 4
gpt4 key购买 nike

我面临一个问题,即每次打开设计器时都会自动调整 WinForms 表单的大小。

这似乎仅在特定设置下才会发生,但是可以通过以下步骤轻松复制...

  • 在visual studio中创建一个新项目
  • 默认的表单大小是 300 x 300,但是无论你设置什么来做笔记
  • 设置 FormBorderStyle属性(property)到FixedSingle
  • 设置 ShowIcon属性(property)到false
  • 设置 ControlBox属性(property)到false
  • 保存更改
  • 关闭设计师
  • 重新打开设计器,您会发现表单缩小了 4 个像素(宽度和高度)

  • 我遇到的问题是,当它发生时,它不会调整任何控件的大小(即设置了 anchor 的控件),所以这意味着我最终会得到与表单边缘重叠的控件,并且每次都需要手动重新调整所有控件我打开设计师这是一个痛苦。

    所以问题是:为什么会发生这种情况,我能做些什么来阻止它发生?

    我目前正在使用 Visual Studio 2012 Professional,John Willemse 通过评论确认 Visual Studio 2010 Professional 中也存在此问题。

    最佳答案

    我明白了,这应该是任何 VS 版本中的错误。这是由 ShowIcon 属性引起的,当您将其设置为 False 时,设计器无法正确处理它。有问题的是 Form 类中的一些代码,如下所示:

           FormBorderStyle borderStyle = FormBorderStyle;
    if (!ShowIcon &&
    (borderStyle == FormBorderStyle.Sizable ||
    borderStyle == FormBorderStyle.Fixed3D ||
    borderStyle == FormBorderStyle.FixedSingle))
    {
    cp.ExStyle |= NativeMethods.WS_EX_DLGMODALFRAME;
    }

    换句话说,当 ShowIcon 为 False 时,它​​使用与 WS_BORDER 不同的边框样式,它使用模态对话框之一。在旧的 Windows 版本上有不同的边界,它们更胖。不确定是什么激发了这段代码,可能与 Windows 98 有关。

    问题是,Size 属性是一个计算值,Winforms 设计器只存储 ClientSize 属性。所以当 ShowIcon 为 False 时,它​​应该重做这个计算,它没有。

    您可以在 connect.microsoft.com 上报告该错误,但 Microsoft 修复它的可能性极低,因此可能会浪费您的时间。有一个非常简单的解决方法,而不是在属性窗口中将 ShowIcon 设置为 False,而是在构造函数中进行。像这样:
        public Form1() {
    InitializeComponent();
    this.ShowIcon = false;
    }

    关于winforms - 设置某些属性时,Designer 会自动重新调整表单大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21931937/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com