提问人:Me3nTaL 提问时间:11/15/2023 更新时间:11/15/2023 访问量:55
表单未正确调整大小
Form is not resizing correctly
问:
我有一个表格,我根据一些条件显示一些数据。 表单的结构基本上是这样的(每个 -> 都是层次结构中的一个子级别):
窗体 -> TableLayoutPanel -> 面板 |面板 |面板 |...
我根据某些条件隐藏了一些子面板。一切正常。
我在 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();
滚动条仍然存在。现在,我必须增加窗体的大小以隐藏滚动条,然后可以再次缩小窗体。当使用鼠标缩小窗体的大小时(在增加大小以隐藏滚动条之后),仅当面板大小太小时才会显示滚动条,这将是正确的行为。但是我必须手动调整它的大小。
我尝试在 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),但必须有办法解决它。
答:
就多个面板而言,我有类似的东西,一次只显示一个面板。我所做的是将所有面板的大小调整为相同的大小,然后在我的代码中,我将它们像一副纸牌一样堆叠起来。无论需要显示哪个面板,我都使用 面板命令。BringtoFront。
另一种选择是将每个面板创建为用户控件,然后根据需要将其加载到流面板中。这可能会为您节省很多存储表单大小的麻烦。
评论
FlowLayoutPanel
TableLayoutPanel
FlowLayoutPanel
Size
评论
FlowLayoutPanel
TableLayoutPanel
FlowLayoutPanel
SystemInformation.VerticalScrollBarWidth
FlowLayoutPanel
TableLayoutPanel