2013-12-22 104 views
0

我嘗試實現類似於Intellisense的操作:當用戶在(WinForms)文本框中輸入文本時,我想顯示建議。TextBox在顯示彈出窗口時失去焦點

目前,我做這樣的事情在TextBox的框TextChanged-事件處理程序:

 ListBox lb = new ListBox(); 
     lb.Items.Add(new DataItem() { Id = "1", DisplayText = "Abc" }); 
     lb.Items.Add(new DataItem() {Id = "2", DisplayText = "Abuiaec"}); 


     ToolStripDropDown popup = new ToolStripDropDown(); 
     popup.Margin = Padding.Empty; 
     popup.Padding = Padding.Empty; 
     ToolStripControlHost host = new ToolStripControlHost(lb); 
     host.Margin = Padding.Empty; 
     host.Padding = Padding.Empty; 
     popup.Items.Add(host); 
     popup.Show(this, Point.Empty); 

然而,只要彈出來了,文本框失去它的焦點。彈出窗口沒有得到重點 - 看起來焦點完全消失。

我能對付這種行爲嗎?

謝謝!

+0

爲什麼你使用'ToolStripMenu',你有什麼具體的原因?,你可以使用'AutoComplete'功能來顯示文本框上的項目 –

+0

@SudhakarTillapudi因爲我打算稍後用一些自定義列表框替換列表框將對每個建議顯示更大和更復雜的控制。 – Philipp

+0

在事件處理程序中加重焦點總是很危險,您必須通過使用Control.BeginInvoke()來延遲焦點。這不會是麻煩的結束,下拉不喜歡失去焦點,因爲它使用它自動重新崩潰。動態創建和處理一個普通的列表框是正確的方法。 –

回答

0

嘗試在末尾添加textbox.Select()以將焦點放在文本框上。

+0

不幸的是,這是行不通的。我曾嘗試過.Focus(),它也沒有任何效果。 – Philipp