credream 发表于 2016-1-18 16:37:00

有关GCcombox下拉列表的宽度的自动调整

在InputMan4.0中的GCcombox,当设置日文字体后,给GCcombox的items添加值
把DropDownAutoSize设置为true,如果这时候存在Item内容的长度,比DropDownWidth要宽的话,DropDown(下拉列表打开)的时候,
DropDown(下拉列表)的宽度会自动调整,以便显示出这个Item内容的所有内容

但是在InputMan8.0中,把DropDown的AutoWidth设置为true之后,下拉列表打开的时候,DropDown的宽度却没有根据Item的内容自动调整

怎么才能在InputMan8.0中实现,下拉列表的宽度会根据Item的内容自动调整宽度呢?

Alice 发表于 2016-1-18 17:48:00

回复 1楼credream的帖子

谢谢反馈。
您的问题我们已经收到了,测试后给您反馈。

Leo 发表于 2016-1-19 10:34:00

回复 1楼credream的帖子

正常情况下,设置DropDown.AutoWidth属性是起作用的,除非以下两种情况
1.您的代码在某个神秘位置设置了DropDown.Size或者DropDown.Width
2.您的DropDown允许用户通过拖拽SizeGrip进行尺寸调整,那么在用户拖拽了之后,AutoWidth就罢工了。

请仔细检查是否对应以上两种情况的某一种,
如果还是没有头绪,请发送界面代码过来,我们这边分析原因。

credream 发表于 2016-1-19 13:45:00

回复 3楼Leo的帖子

代码上传给你吧,代码很简单,只是在设计模式下设置了DropDown.Width

Leo 发表于 2016-1-19 16:12:00

回复 4楼credream的帖子

这就是问题所在了。
既然您希望列宽为Auto,为啥还要设置DropDown.Width属性呢?
目前的策略,DropDown.Width属性的优先级高于AutoWidth
请考虑移除掉以下代码:
Me.GcComboBox1.DropDown.Width = 112

credream 发表于 2016-1-19 17:01:00

回复 5楼Leo的帖子

恩,是在.Designer.vb文件中设置了,Me.GcComboBox1.DropDown.Width = 112
但是删除掉之后依然,没有自动调整的效果啊。。

Leo 发表于 2016-1-20 09:40:00

回复 6楼credream的帖子

果然如此。
许久不碰这块儿代码,策略都忘记了。被你这么一吓,突然记起来了。
故事是这个样子的。
以下将是一个长长的故事,不想了解直接可以拖拽到底部查看代码……
=======表示故事开始的华丽分隔线=================


最初的v4.0版本是固定显示两列,Text和Description。计算列宽的逻辑也比较直白和粗暴,DropDownList的宽度刨掉Description的宽度,就是显示文本列的宽度。

但是到了v5.0版本之后,GcComboBox是多列的概念,如果需要计算自动列宽,需要求出每一列的具体宽度。
每一列的宽度可以是一个绝对值,也可以是自动计算出来的最合适列宽。

最最最最重点的地方到了。
不加列的话,ListItem也能正常显示,但是列宽等于DropDownList的宽度。

那么问题就来了。
到底是ListItem的宽度决定DropDownList的宽度呢,还是DropDownList决定ListItem显示的宽度呢。
答案明显明显不能是Both

因此,最终的策略,在不加列的情况下下,自动列宽就免于计算。

针对你给的Demo,刚好碰到了这两种情况
首先不能设置DropDown.Width,但是这个明显滴还不够,因为你的代码没有添加任何的ListColumn。

解决方案也不难,添加一个列,然后设置列宽为自动即可。
不必担心列头会显示出来,因为已经被你藏掉了。

=======故事基本上讲完的分隔线==================
代码如下
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      Dim listColumn As New GrapeCity.Win.Editors.ListColumn
      listColumn.AutoWidth = True
      Me.GcComboBox1.ListColumns.Add(listColumn)
    End Sub

还有其他的可选方案,比如说自己量一下最宽的ListItem多宽,然后掐指一算,加上Border/ScrollBar等边距,自己计算一个列宽,亦可。

credream 发表于 2016-1-20 11:27:00

回复 7楼Leo的帖子

谢过大神。。。:hjyzw:

Alice 发表于 2016-1-20 14:30:00

回复 8楼credream的帖子

谢谢反馈。
你可以给@Leo大神 大大的赞。
页: [1]
查看完整版本: 有关GCcombox下拉列表的宽度的自动调整