2010-10-28 90 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