我在VB6中有一个有趣的项目,我使用了很长的标签,希望它们能拉伸显示器的整个长度,但是它们似乎限制为每行256个字符。我可以根据自己的喜好设置字幕,但是在第256个字符之后,其余字符不会显示在屏幕上。
但是,如果我将其更改为多行,它将显示全文,但再次会在第256个字符处自动换行,这意味着它不占用显示器的整个宽度。
我想知道是否有人知道这是为什么,一种解决方法或我的选择是什么?
编辑:经过测试,使用文本框并使其看起来像标签是可以解决的问题,因为文本框似乎没有相同的限制。
编辑2:文本框缺少自动调整大小功能,这对我的项目至关重要,因此请您进一步提出建议。
答案 0 :(得分:3)
根据MSDN文档:
标签控件的标题大小不受限制。对于表格和所有其他 带有字幕的控件,限制为255个字符。
但是,正如您所看到的,此陈述可能不正确。它似乎也适用于Label控件,在我的实验中,该限制实际上是256个字符。
我认为您对TextBox控件的想法应该可以满足您的需求。由于没有AutoSize属性,因此只需在Form Resize事件中更改控件的宽度即可。
Private Sub Form_Resize()
Text1.Width = Me.ScaleWidth
End Sub
答案 1 :(得分:2)
在Brian的答案上,是的,如果您希望“标签”超过255个字符,则需要使用TextBox。如果您设置了一些内容,则可以使TextBox看起来像标签一样。
首先,将BorderStyle
属性设置为vbBSNone
(或根据需要设置为0)。然后,您不希望用户在其中输入文本或更改“标签”。如果您不大惊小怪,可以将Locked
属性设置为true。这并不完美,因为设置Locked
属性仍然允许用户单击文本并在其中移动。
如果您真的不是很挑剔,则可以将Enabled
设置为false。这会使用户感到困惑,因为所有内容都变灰了,并且用户习惯于理解为意味着禁用某些功能。但是,不能将禁用的控件放到控件上或将其置于选项卡上,这是标签要执行的操作。
如果您希望在不改变外观的情况下获得禁用行为,则需要使用API:
Private Const WS_DISABLED = &H8000000
Private Const GWL_STYLE = -16
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Sub Form_Load()
Dim theStyle As Long
theStyle = GetWindowLong(myTextBox.hwnd, GWL_STYLE) Or WS_DISABLED
Call SetWindowLong(myTextBox.hwnd, GWL_STYLE, theStyle)
End Sub
非常简单。 GWL_STYLE
是窗口样式属性的索引。这是一个十六进制值,等于一系列标志。如果将Or
的{{1}}十六进制值与之对应,则结果是设置了禁用标志。当您使用WS_DISABLED
的新值设置窗口时会设置哪个值。
Here是GWL_STYLE
处理的不同设置。