找回密码
 立即注册

QQ登录

只需一步,快速开始

credream

中级会员

110

主题

296

帖子

828

积分

中级会员

积分
828

活字格认证

credream
中级会员   /  发表于:2016-1-18 16:37  /   查看:10433  /  回复:8
在InputMan4.0中的GCcombox,当设置日文字体后,给GCcombox的items添加值
把DropDownAutoSize设置为true,如果这时候存在Item内容的长度,比DropDownWidth要宽的话,DropDown(下拉列表打开)的时候,
DropDown(下拉列表)的宽度会自动调整,以便显示出这个Item内容的所有内容

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

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

8 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2016-1-18 17:48:00
沙发
回复 1楼credream的帖子

谢谢反馈。
您的问题我们已经收到了,测试后给您反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Leo
超级版主   /  发表于:2016-1-19 16:12:00
5#
回复 4楼credream的帖子

这就是问题所在了。
既然您希望列宽为Auto,为啥还要设置DropDown.Width属性呢?
目前的策略,DropDown.Width属性的优先级高于AutoWidth
请考虑移除掉以下代码:
  1. Me.GcComboBox1.DropDown.Width = 112
复制代码
回复 使用道具 举报
credream
中级会员   /  发表于:2016-1-19 17:01:00
6#
回复 5楼Leo的帖子

恩,是在.Designer.vb文件中设置了,Me.GcComboBox1.DropDown.Width = 112
但是删除掉之后依然,没有自动调整的效果啊。。
回复 使用道具 举报
Leo
超级版主   /  发表于:2016-1-20 09:40:00
7#
回复 6楼credream的帖子

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


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

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

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

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

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

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

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

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

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

评分

参与人数 1金币 +999 收起 理由
Alice + 999 奖励金币

查看全部评分

回复 使用道具 举报
credream
中级会员   /  发表于:2016-1-20 11:27:00
8#
回复 7楼Leo的帖子

谢过大神。。。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-1-20 14:30:00
9#
回复 8楼credream的帖子

谢谢反馈。
你可以给@Leo大神 大大的赞。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部