此方法为个人优化版,且不会触发ComboBox的其他方法以免出现未知其他问题,需放在窗体代码内。
'直接定义整型返回值
Public Function calDropDownWidth(ComboBox) As Integer
Dim maxSize As Integer = 0
Dim g As Graphics
g = CreateGraphics()
Dim size As SizeF
For i = 0 To ComboBox.Items.Count - 1
size = g.MeasureString(ComboBox.Items(i).ToString, ComboBox.Font)
If maxSize < size.Width Then
maxSize = size.Width
End If
Next
g.Dispose()
If ComboBox.DropDownWidth < maxSize Then
'calDropDownWidth = maxSize
'此处我在原长度上加了30,是为了避免下拉框有滚动条的情况时最后一点内容会被覆盖的问题,不加也可以
calDropDownWidth = maxSize + 30
Else
calDropDownWidth = ComboBox.DropDownWidth
End If
End Function
这样只需要在相关事件触发时传入名称,赋值给下拉框长度即可(举例名称为CmbName)
CmbName.DropDownWidth = calDropDownWidth(CmbName)