我有一个表单,我根据某些条件显示一些数据。表单的基本结构如下(每个->是层次结构中的一个子级别):
表单->表格布局面板->面板|面板|面板|......这是什么?
我根据某些条件隐藏了一些子面板。这一切都很好。我在TableLayoutPanel上使用了滚动条(AutoScroll = true
)。当关闭或关闭表单时,我将大小存储在数据库中,以便在再次打开表单时检索正确的大小。现在,当我打开表单并隐藏其中一些子面板时,滚动条仍然显示,尽管面板被隐藏(Visible = false
)。
表单会像这样打开:
Form f = new Form();
f.InitForm(); // get the Size from the database and hide the panels I dont need
f.Show();
字符串
x1c 0d1x的数据
滚动条仍然存在。现在我必须增加窗体的大小以隐藏滚动条,然后我可以再次缩小窗体。当用鼠标缩小窗体的大小时(在增加大小以隐藏滚动条之后),只有当面板的大小太小时,滚动条才会出现,这是正确的行为。但是我必须手动调整它的大小。
我尝试在Load()
和Shown()
事件中调用PerformLayout()
,或者在InitForm()
-方法的末尾调用PerformLayout()
,但没有任何变化。只有当我增加窗体的大小,然后将其缩小到其内容边界时,滚动条才会消失。
有一件事很管用,那就是
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),但必须有一个方法来解决这个问题。
1条答案
按热度按时间wfsdck301#
我有一些类似的多个面板,一次只显示一个。我所做的是将所有面板的大小设置为相同的大小,然后在我的代码中,我将它们像一副扑克牌一样堆叠起来。需要显示哪个面板,我使用. BringtoFront的面板命令。
另一种选择是将每个面板创建为用户控件,然后根据需要将其加载到flowpanel中,这可能会为您保存大量存储表单大小的麻烦。