【发布时间】:2021-03-20 05:17:24
【问题描述】:
我在 VB.Net VS2019 中有一个用户控件。它用于显示描述、值和单位。如果描述不是太大,它通常可以工作。 用户控件中的控件都是标签。
在调整大小事件中,它将描述宽度调整为总宽度的 66%、值的 22%,以及剩余的任何单位。
然后它将描述的左边设置为0,将值的左边设置为描述的宽度(加一点)。对于单位的位置,它将值的左侧位置加上它的宽度和一点。
但是当程序运行时,控件相互重叠,不会占用UserControl的整个空间。
例如,UserControl 的宽度为 236,但看起来所有内容都被压缩到大约 1/2 或 2/3 秒。 我已将 Anchor 设置为 none 并停靠为 none。
我在“调整大小”事件中执行这些计算,如下所示。该代码是从旧的 VB6 程序移植而来的。
“自动”尺寸属性是否优先于我指定的宽度?
Private Sub UserControl1_Resize(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Resize
Dim lblUnits_Size As Integer
Label1.Height = MyBase.Height
Label2.Height = MyBase.Height
lblUnits.Height = MyBase.Height
Label1.Width = CInt(MyBase.Width * 0.6167)
Label2.Width = CInt(MyBase.Width * 0.22)
' I want the width of the units to be whatever is left over
lblUnits_Size = MyBase.Width - (Label1.Width + Label2.Width) - 6
If lblUnits_Size <= 0 Then lblUnits_Size = 1
lblUnits.Width = lblUnits_Size ' was -> TwipsToPixelsX(lbUnits_Size)
Label1.Left = 0
Label2.Left = (Label1.Left + Label1.Width) + 3
lblUnits.Left = (Label2.Left + Label2.Width) + 3
End Sub
【问题讨论】:
-
(假设 WinForms,标记您的问题,指定 UI 平台):使用具有比例列的 TableLayoutPanel,将标签的 AutoSize 属性设置为
false,将标签停靠在 TLP 的单元格内。跨度> -
我想我认为 VB.Net 已经足够具体了。我不知道有什么不同。这就像学习一种全新的口语。谢谢。 VB.Net 还有多少其他 UI 平台?
标签: vb.net