簡體   English   中英

獲取winforms中文本框的自動完成下拉框的句柄

[英]Getting handle of Autocomplete dropdown box of textbox in winforms

我想調整文本框的自動完成下拉框的寬度。 我不想調整該文本框的寬度,只想調整自動完成下拉列表。 我知道我無法通過使用文本框提供的屬性來增加自動完成下拉列表的寬度。

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

如果這是不可能的,那么我想創建自動完成的自定義文本框,在這種情況下如何使用微軟提供的現有自動完成功能? 有沒有辦法做到這一點。 有沒有可用的庫?

我不認為你可以使用微軟自動完成的實現,它沒有調整下拉寬度的選項。

創建一個后台線程,不要打字,並連接組合框或文本框的文本更改事件以更新候選列表(假設自動提示模式,因為你提到了一個下拉列表)。 如果你有一個組合框,你可以動態添加/刪除組合框項目 但是對於下拉列表和文本框項目,您需要一個彈出窗口

彈出窗口很容易顯示,但是你不需要使用固定位置,因此當文本框靠近屏幕邊緣時它不會離開屏幕。 焦點邏輯有點復雜。 除非用戶按箭頭鍵進行選擇,否則您需要將注意力集中在文本框上。

所以當焦點在文本框上時:箭頭鍵將焦點移動到彈出窗口,如果沒有由對話框本身處理,則其他鍵移動到文本框,當鼠標懸停在彈出窗口上時,除了刪除鍵。 當焦點在彈出窗口時:箭頭鍵將焦點移動到兄弟候選項目或文本框其他鍵轉到文本框,如果沒有由對話框本身處理,除了刪除鍵

鼠標點擊:關閉彈出窗口或彈出窗口外的彈出窗口。 如果單擊彈出窗口中的候選項,則更新文本框的值

要使焦點/線程正確,需要花費很多精力。 如果您可以負擔一些表單空間,則可以向表單添加固定寬度的列表框,例如Visual Studio幫助查看器的索引窗格。

經過大量的博客文章和不同的文章后,我達成共識,幾乎不可能以我想要的方式解決我的問題。 所以我決定要么想出一個自定義解決方案,要么就像盛江說我需要實現自己的自動完成對象。

我提出了一個符合我要求的解決方案,在我添加自動完成自定義源時,根據自動完成字符串列表中的最大字符串增加文本框的寬度。 正如我所說,由於表單上的大小限制,我無法增加文本框的寬度,因此我決定將此文本框保留在面板中,並增加其中文本框的大小。 面板不會隨着文本框一起增長,因此解決了我的問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM