2010-10-28 40 views
3

我想调整文本框的自动完成下拉框的宽度。我不想调整该文本框的宽度,但只需调整“自动填充”下拉列表的宽度。我知道我无法通过使用随文本框提供的属性来增加自动填充下拉列表的宽度。在winforms中获取文本框的自动完成下拉框的句柄

因此,我想知道是否有任何方法可以获取该自动填充框的句柄,然后在不更改文本框宽度的情况下增加该下拉列表的宽度?

如果这是不可能的,那么我想创建自定义文本框与自动完成,在这种情况下,如何使用微软提供的现有自动完成功能?有没有办法做到这一点。有没有可用的库?

+0

http://stackoverflow.com/questions/4820429/combo-box-drop-down-width-on-suggest可以修改为TextBox。 – Loathing 2014-08-31 07:20:57

回答

3

经过大量的博客文章和不同的文章后,我达成了一致,认为几乎不可能以我想要的方式解决我的问题。所以我决定要么提出一个自定义解决方案,要么就像盛江说的那样,我需要实现自己的自动完成对象。

我已经想出了一个解决方案,通过增加自动完成字符串列表中最大字符串的文本框宽度来满足我的要求,同时添加了自动完成自定义源。正如我所说,由于表单上的大小限制,我不能增加文本框的宽度,所以我决定将此文本框保存在一个面板中,并增加该文本框的大小。面板不会与文本框一起增长,以解决我的问题。

我知道这不是完美的解决方案,但它符合我的要求。

5

我不认为你可以使用微软的autocomplete实现,它没有选项来调整下拉宽度。

创建后台线程以避免打字,并连接组合框或文本框的文本更改事件以更新候选列表(假设自提示下拉菜单后自动提示模式)。如果你有一个组合框,你大概可以使用add/remove the combobox items on the fly。但是对于下拉列表和文本框项目,您可以使用need a popup window

弹出窗口很容易显示,但您不需要使用固定位置,因此当文本框靠近边缘时不会离开屏幕屏幕。而重点逻辑有点复杂。除非用户按箭头键进行选择,否则您需要关注文本框。

所以 当焦点在文本框: 方向键将焦点移到弹出 其他键进入到文本框,如果不通过对话本身处理,除了当鼠标在弹出的删除键。 当焦点在弹出: 方向键移动焦点到同级候选项目或文本框 其他键进入到文本框,如果不通过对话本身处理,除了删除键

鼠标点击: 关闭弹出窗口或弹出窗口之外的弹出窗口。 如果点击弹出框中的候选项目,则更新文本框的值

获得焦点/线程权限需要付出很大的努力。如果您可以承受某些表单空间,则可以将一个固定宽度的列表框添加到表单中,而不是像Visual Studio帮助查看器的索引窗格。

+0

江:你建议实现的任何其他选项? – JPReddy 2011-01-07 12:04:33

+0

查看更新的帖子 – 2011-01-07 18:19:08