1. C#中combobox如何實現模糊查詢,並能自動顯示下拉列表
1.用一個List<string> listOnit存放初始化數據,用一個List<string> listNew存放輸入key之後,返回的數據。
2.用上面的listOnit初始化ComboBox數據源進行綁定。
3.在TextUpdate方法內部,添加實現方法。
首先進入方法,先清除ComboBox的內容,然後將輸入的內容去listOnit初始化的數據中比對,找出對應數據,然後放入listNew存放數據,最後將listNew數據重新賦值給ComboBox。
後台代碼實現:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceTimerDemo
{
publicpartialclassForm2 : Form
{
//初始化綁定默認關鍵詞(此數據源可以從資料庫取)
List<string> listOnit = newList<string>();
//輸入key之後,返回的關鍵詞
List<string> listNew = newList<string>();
publicForm2()
{
InitializeComponent();
}
privatevoidForm2_Load(objectsender, EventArgs e)
{
//調用綁定
BindComboBox();
}
/// <summary>
/// 綁定ComboBox
/// </summary>
privatevoidBindComboBox()
{
listOnit.Add("張三");
listOnit.Add("張思");
listOnit.Add("張五");
listOnit.Add("王五");
listOnit.Add("劉宇");
listOnit.Add("馬六");
listOnit.Add("孫楠");
listOnit.Add("那英");
listOnit.Add("劉歡");
/*
* 1.注意用Item.Add(obj)或者Item.AddRange(obj)方式添加
* 2.如果用DataSource綁定,後面再進行綁定是不行的,即便是Add或者Clear也不行
*/
this.comboBox1.Items.AddRange(listOnit.ToArray());
}
privatevoidcomboBox1_TextChanged(objectsender, EventArgs e)
{
/*
* 不能用TextChanged操作,當this.comboBox1.DroppedDown為True時,選擇項上下鍵有沖突
*/
}
privatevoidcomboBox1_TextUpdate(objectsender, EventArgs e)
{
//清空combobox
this.comboBox1.Items.Clear();
//清空listNew
listNew.Clear();
//遍歷全部備查數據
foreach(varitem inlistOnit)
{
if(item.Contains(this.comboBox1.Text))
{
//符合,插入ListNew
listNew.Add(item);
}
}
//combobox添加已經查到的關鍵詞
this.comboBox1.Items.AddRange(listNew.ToArray());
//設置游標位置,否則游標位置始終保持在第一列,造成輸入關鍵詞的倒序排列
this.comboBox1.SelectionStart = this.comboBox1.Text.Length;
//保持滑鼠指針原來狀態,有時候滑鼠指針會被下拉框覆蓋,所以要進行一次設置。
Cursor = Cursors.Default;
//自動彈出下拉框
this.comboBox1.DroppedDown = true;
}
}
}
實現效果截圖:
從左到右模糊查詢:(例如輸入:張)
實現過程中的問題:
1.綁定數據一開始用的DataSource方式,但是寫到下面重新給ComboBox設置數據源的時候,報錯:不能為已經設置DataSource的combobox賦值。
解決方式:將賦值方式改為:Item.Add(obj)或者Item.AddRange(obj)方式
2.下拉框的內容一直在增加
解決方式:當文本框文本改變時,清空下拉框的內容,然後再添加數據。
3.輸入文本改變時,沒有自動彈出下拉框顯示已經查詢好的數據。
解決方式:設置comboBox的DroppedDown 屬性為True。
4.ComboBox文本框改變事件一開始選擇用的是TextChanged事件,但是當在界面用 上 下鍵盤選擇時,出現bug,不能進行選擇。
解決方式:將文本框改變事件換為TextUpdate事件,然後添加實現方法。
5.當在ComboBox輸入內容時,內容文本是倒序輸出的,游標位置始終在最前面。
解決方式:設置游標的顯示位置,this.comboBox1.SelectionStart = this.comboBox1.Text.Length;
6.輸入內容改變時,用滑鼠選擇下拉列表項的時候,滑鼠指針消失,被下拉框覆蓋掉。
解決方式:設置滑鼠狀態為一開始的默認狀態,Cursor = Cursors.Default;
2. 如何不畫wpf 中ComboBox的最外層邊框
外邊框有個BorderBrush,也可以透明,下面還有BorderThickness,應該是邊框線的寬度吧。三角沒有屬性設置不顯示,你那麼想要label,直接用label不就得了,真不明白現在的人都怎麼了,什麼控制項都想改成和label一樣,真奇怪。
3. WPF ComboBox 不可選擇,可以看。
最簡單做法就是設置下ComboBoxItem的IsEnabled屬性就可以了
<Style TargetType="ComboBoxItem">
<Setter Property="IsEnabled" Value="False"/>
</Style>
4. WPF中,combobox.selectitem.tostring()得到的是System.Windows.Controls.ComboboxItem:+
後台用以下代碼:
(combobox.SelectedItem as ComboBoxItem).Content.ToString();
就能取到「+」了
5. WPF中combobox如何判斷選擇的是哪個內容
你這個是固定的,可以直接使用SelectedIndex來進行選擇。或者
ComboBoxbox=newComboBox();
//這是定義部分的
box.Items.Add(newBookType{Name="1.近現代文學",Table="藏書信息資料庫"});
box.Items.Add(newBookType{Name="2.古代文學",Table="藏書信息資料庫1"});
box.Items.Add(newBookType{Name="3.喜愛圖書",Table="藏書信息資料庫2"});
box.SelectedValuePath="Table";
box.DisplayMemberPath="Name";
//這里是選擇後的
if(box.SelectedIndex!=-1)
{
stringtableName=box.SelectedValue;
}
這是類定義
classBookType
{
publicstringName{get;set;}
publicstringTable{get;set;}
}
這樣就行了
6. C#,wpf,ComboBox如何禁止下拉有沒有什麼屬性可以設置
不知道為什麼要禁止下拉,如果不讓用,可以修改DropDownStyle屬性的值,不知道是不是你要的效果
7. WPF裡面的Combobox,當點擊別處時,Dropdownopen會變成false,是失去焦點後
首先在wpf的combobox里是沒有Dropdownopen這個屬性的。只有DropDownClosed和DropDownOpened事件。樓主想實現的功能可以用一個button+listbox來代替。通過後台邏輯控制listbox的visibility就可以了。
8. WPF中ComboBox選定的選項在數據源集合中刪除該選項元素後,如何還能繼續顯示該選定選項
你可以使用兩個List保存數據,一個保存所有的項
另一個保存選擇的項
每次點擊下拉框的時候從當前下拉框重新設置下拉框中數據源的顯示形式(比如選過的項顯示為灰色且不可選擇)
應該有BeforeChanged事件和DrawItem事件可以幫你完成這個功能
可以參考這個做禁用項的功能
9. wpf中滑鼠放到combobox的下拉菜單選項上,該選項就會改變背景顏色,怎麼取消變色
添加button按鈕 編寫相應的代碼 就是把沒有變色前得顏色是啥就恢復成啥