winforms - 表单加载期间带有dockstyle填充的用户控件大小不正确

Posted

技术标签:

【中文标题】winforms - 表单加载期间带有dockstyle填充的用户控件大小不正确【英文标题】:winforms - usercontrol with dockstyle fill not correct size during form load 【发布时间】:2011-05-25 18:44:17 【问题描述】:

我的主窗体有两个面板,左停靠和右停靠。右侧面板有两个具有顶部停靠和底部停靠设置的子面板。用户控件被添加到右侧顶部面板。

我的用户控件有一个面板和一个标签。面板固定在所有 4 个侧面,标签固定在除底部之外的所有侧面。在运行时,我创建了这个用户控件并将其设置为 dockstyle=fill,然后将其添加到我的右上角面板。

将所有内容设置为“填充”后,我希望当我将用户控件添加到面板时,它将采用适当的宽度和高度,并将该信息传递给用户控件内的子控件(标签)。

我的问题是,当我在用户控件上的 Load 事件期间创建对象时,不会发生这种大小的拉伸。即使 initializecomponent 已经为用户控件运行,它内部的面板(锚定 4 个角)也没有获取可用空间的 x/y 值。结果,我的用户控件显示了我想要的宽度的大约 50%。

假设我不是在用户控件加载期间创建对象,而是启动一个计时器并让计时器在引发滴答事件时调用我的创建例程。当我做这样的事情时,我的对象是以我期望的全宽/高度创建的。这里唯一的问题是这会导致我的界面出现延迟。

有人可以帮助解释这种行为吗?我的主窗体正在调用“加载 gui”例程,该例程正在实例化用户控件、设置面板大小,然后将用户控件添加到这些面板。这个特定的用户控件是最后从该加载 gui 例程加载到面板中的,因此尚不知道父面板的宽度/高度是没有意义的。这是我的第一个应用程序之一,我特意尝试使用 dockstyle=fill 在不同的主要表单大小之间保持一致,而无需编写所有额外的 size_changed 代码处理程序。我确信一旦我知道问题出在哪里,这个很容易解决。

感谢您提供的任何帮助!

【问题讨论】:

您是否尝试过将用户控件添加到面板,然后将 DockStyle 设置为 Fill?另外,确保用户控件和面板的 AutoSize 设置为 false。 我在设计时尝试过。设计器显示相同的行为。检查了 autosize 道具,它们都是错误的。当我使用“设计时间”添加控件运行它时,这是奇怪的事情......它以全尺寸出现。希望我知道在运行时添加时发生了什么,但我现在可以处理。谢谢斯图尔特的建议。 【参考方案1】:

这原来是父用户控件上的填充问题。我还必须留出一点回旋余地,以确保控件不会溢出面板,所以我做了一个 parent.width - 15,再加上填充,一切都变得更好了。

【讨论】:

以上是关于winforms - 表单加载期间带有dockstyle填充的用户控件大小不正确的主要内容,如果未能解决你的问题,请参考以下文章

WinForm 应用程序 UI 在长时间运行期间挂起

WinForm 应用程序 UI 在长时间运行期间挂起

安装期间无法最小化或移动 Winform 窗口

Outlook 2007 加载项:在我的表单区域 (WinForm) 重用内置的“收件人...”控件

如何将 HTML/JavaScript 从嵌入式资源加载到 winform Web 浏览器

如果我不想加载主窗体,如何处理 Winforms 中的命令行参数?