【发布时间】:2018-04-25 11:53:16
【问题描述】:
我用 VS2017 在 vb.NET 中设计了一个 WinForm。我现在想添加一个功能,使表单具有两种尺寸 - 它最初加载的正常尺寸以及当用户单击表单上的最大化按钮时触发的更大尺寸。如果可能的话,如果用户拖动它的侧面等,我不希望表单调整大小,我只希望它在他们单击最大化按钮时工作。
表单本身的布局如图所示,它由一个始终固定在顶部的 Panel 和一个在窗口最大化时会放大的 TabControl 组成。 TabControl 由 6 个 TabPages 组成,所有这些 TabPages 上都有 GroupBoxes 和 Panels,每个 GroupBox/Panel 都有几个 Labels 和 TextBoxes。当它放大时,我希望标签和文本框的大小增长到与 TabControl 放大相同的百分比 - 基本上 TabControl 中的所有内容都增长相同的百分比
我正在考虑的一个可能的解决方案是捕获最大化和“正常大小”的表单状态(正常大小在加载时触发,如果用户单击以取消最大化最大化的表单),然后遍历每个选项卡上的每个控件页面并设置每个控件的样式以适应所需的更大布局。
我设法捕获了最大化和最小化的事件,如下所示:
Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
If Me.WindowState = FormWindowState.Maximized Then
Console.WriteLine("I have been maximised")
End If
If Me.WindowState = FormWindowState.Normal Then
Console.WriteLine("I have been minimised")
End If
End Sub
我尝试将除 TabControl 之外的每个控件的 Anchor Style 设置为“Top,Bottom,Right,Left”,然后在上面的子程序中,将 TabControl AncorStyle 设置为“Top,Bottom,Right,Left”,但我有两个问题:
1) 以下代码无法正确将 AnchorStyle 设置为“Top,Bottom,Right,Left”
TabControl1.Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right
以下也没有成功:
TabControl1.Anchor = AnchorStyles.Top And AnchorStyles.Bottom And AnchorStyles.Left And AnchorStyles.Right
2) 当我在设计器中手动将 TabControl 的 AnchorStyle 设置为“上、下、左、右”,并在运行表单时单击“最大化”时,表单以不希望的方式展开,并且 GroupBoxes 处于打开状态TabPage 重叠,文本在标签等中没有改变其大小:
对此的任何帮助将不胜感激
【问题讨论】:
-
您可以使用
TableLayoutPanel与按比例调整大小的列和行,然后在其中使用Dock或Anchor控件。 Here 是一个非常简单的例子。请记住,某些控件取决于Font的大小,例如单行TextBox. -
TLP 不会改变字体大小。这是一个坏主意,文本不应该因为用户改变了窗口大小而变得难以阅读。请注意您机器上的所有程序都没有这样做。但是只要控件从它们的容器继承它们的字体就很容易做到,只需更改容器的 Font 属性。从表格开始。
-
我担心这可能需要大量的重新设计,@Hans Passant,你能指出我正确的穿着方向吗?我可以找到如何控制从他们的字体大小继承他们的字体大小容器?如果每个标签和文本框位于不同的行中,我是否仍然可以将标签设置为粗体,将 TextBox 文本设置为常规,因为它们都在同一个面板上?
-
使用设计器即可。如果控件的 Font 属性不是粗体,则它使用其父级的字体。混合这样的风格肯定会让你的生活变得更加艰难。
标签: vb.net winforms maximize maximize-window layout-anchor