dev中有很多的選擇框控件,但是沒有發現能夠根據文本框輸入實時獲取數據源進行模糊查詢的選擇框,lookupedit是在數據源不變情況下實現自動匹配,但很多時候數據量太大以至於我們沒法先綁定數據源。
這時我們需要一個能夠實現實時匹配的SearchTextBox。這里我們用到了popupcontainerEdit。
先從工具欄中拖一個popupcontainerEdit和一個popucontainerControl。popupcontainerEdit像是一個lookupedit的輸入選擇框。而popucontainerControl則像是一個lookupedit的下拉框。popucontainerControl是一個類似panel的容器。我們可以放置各種數據集合控件,這里我們在里面放置了一個treeList.


利用popupcontainerEdit.Properties下PopupControl屬性綁定popucontainerControl,將popucontainerControl和popupcontainerEdit二者聯系起來

再注冊popupcontainerEdit的editValueChanged事件或者TextChanged事件。這里我們用的是editValueChanged事件。當popupcontainerEdit輸入文字的時候會觸發這個事件,實時綁定數據。這里因為是demo所以用的假數據寫死。實際情況是到數據庫中去查詢。注意這里可能會有延時,為了防止界面卡住你可以把查詢的方法異步,查詢到數據之后再Invoke回調主線程。最后在treeList的mousedoubleClick中找到選擇的項。
private void popupTest_EditValueChanged(object sender, EventArgs e) { if (popupTest.EditValue == null) { tlTest.DataSource = ""; return; } switch (popupTest.EditValue.ToString()) { case "張": tlTest.DataSource = new List<NameValue>() { new NameValue() { Name="張三",Value="zhang"}, new NameValue() { Name="張天愛",Value="zhang2"}, new NameValue() { Name="張伯倫",Value="zhang3"}, }; break; case "李": tlTest.DataSource = new List<NameValue>() { new NameValue() { Name = "李四", Value = "li" }, new NameValue() { Name = "李世民", Value = "li2" } }; break; case "王": tlTest.DataSource = new List<NameValue>() { new NameValue() { Name="王五",Value="wang"}, new NameValue() { Name="王王",Value="wang2"} }; break; default: tlTest.DataSource = ""; break; } popupTest.ShowPopup(); popupTest.Focus(); }
最后,我們再看下運行的效果:

