表单未正确调整大小

Form is not resizing correctly

提问人:Me3nTaL 提问时间:11/15/2023 更新时间:11/15/2023 访问量:55

问:

我有一个表格,我根据一些条件显示一些数据。 表单的结构基本上是这样的(每个 -> 都是层次结构中的一个子级别):

窗体 -> TableLayoutPanel -> 面板 |面板 |面板 |...

我根据某些条件隐藏了一些子面板。一切正常。 我在 TableLayoutPanel 上使用滚动条 ()。调整大小或关闭表单时,我会将大小存储在数据库中,以便在再次重新打开表单时检索正确的大小。现在,当我打开窗体并隐藏其中一些子面板时,滚动条仍然出现,尽管面板是隐藏的()。AutoScroll = trueVisible = false

表单打开如下:

Form f = new Form();
f.InitForm(); // get the Size from the database and hide the panels I dont need
f.Show();

滚动条仍然存在。现在,我必须增加窗体的大小以隐藏滚动条,然后可以再次缩小窗体。当使用鼠标缩小窗体的大小时(在增加大小以隐藏滚动条之后),仅当面板大小太小时才会显示滚动条,这将是正确的行为。但是我必须手动调整它的大小。

我尝试在 and 事件中或在我的方法末尾调用,但没有任何变化。只有当我增加表单的大小,然后将其缩小到其内容边界时,滚动条才会消失。PerformLayout()Load()Shown()InitForm()

有一件事是有效的,那就是说

void InitForm() {
...
subpanel1.Visible = false;
subpanel1.Size = new Size(0,0); // after setting the Size to (0,0) the scrollbar won't show up
}

因此,窗体或 TableLayoutPanel 会以某种方式忽略可见性,并且仍然使用隐藏面板的大小。

有没有人对处理尺寸问题有建议?唯一的方法是将大小设置为 (0,0),但必须有办法解决它。

C# .NET WinForms

评论

0赞 IV. 11/15/2023
您是否考虑过用 a 代替 a?只需将 的宽度设置为子面板的宽度,并查看 stackoverflow.com/a/75104373/5438626FlowLayoutPanelTableLayoutPanelFlowLayoutPanelSystemInformation.VerticalScrollBarWidth
0赞 Me3nTaL 11/15/2023
我没有尝试过,但问题更多的是关于高度,正如您在屏幕截图中看到的那样,垂直有一个滚动条,但该区域没有内容。我想坚持使用,因为我在这些中构建了一些逻辑,并且我通常在我的应用程序中使用它们。FlowLayoutPanelTableLayoutPanel

答:

0赞 CodeButcher 11/15/2023 #1

就多个面板而言,我有类似的东西,一次只显示一个面板。我所做的是将所有面板的大小调整为相同的大小,然后在我的代码中,我将它们像一副纸牌一样堆叠起来。无论需要显示哪个面板,我都使用 面板命令。BringtoFront。

另一种选择是将每个面板创建为用户控件,然后根据需要将其加载到流面板中。这可能会为您节省很多存储表单大小的麻烦。

评论

0赞 Me3nTaL 11/15/2023
子面板需要放置在彼此下方。我尽量避免使用FlowLayoutPanel
0赞 CodeButcher 11/15/2023
Flowlayoutpanel 是要走的路。现在我想到了,我用它来做你在另一个应用程序中所说的。如果有效,为什么要避免它?有什么理由避免使用流量面板吗?
0赞 Me3nTaL 11/15/2023
我需要它,因为我使用它的列和行功能。我们使用带有大量控件的大面板,我不能简单地将其更改为使用 Flow 功能并为每个实体创建用户类。相信我,使用 不是一个有效的选项。我宁愿使用解决方法将隐藏子面板设置为(0,0)。TableLayoutPanelFlowLayoutPanelSize