當前位置:成語大全網 - 書法字典 - Winform comboBox配置項不要求代碼顯示是否,其值為1。如果不需要代碼,應該如何配置?註:無代碼。

Winform comboBox配置項不要求代碼顯示是否,其值為1。如果不需要代碼,應該如何配置?註:無代碼。

將ComboBox的AutoCompleteMode屬性設置為SuggestAppend,將AutoCompleteSource屬性設置為ListItems,然後隨意在ComboBox中插入幾個子項,看看效果。

擴展:

AutoCompleteMode允許四個值:

None:默認值,表示ComboBox不使用自動功能。

建議:在組合框中輸入字符後,組合框會自動展開並顯示匹配的子項。輸入線路不會受到影響。您需要自己輸入後續字符,或者單擊下拉框中的完整子項。

Append:輸入壹個字符後,匹配的內容會自動添加到該字符後(以反色顯示),但ComboBox不會展開。按向上和向下鍵在多個匹配項之間切換。

SuggestAppend:以上兩種模式的結合。

AutoCompleteSource屬性有9種,* * *,表示要搜索的數據源會自動補全。常用的有以下幾種:

ListItems:數據源為ComboBox的項目集合。

文件系統:文件系統。例如,輸入c:\將展開c:\下的目錄列表(或在追加模式下自動添加)。同樣,這個數據源也支持文件名的補全。

CustomSource:自定義數據源。選擇此方法時,必須將ComboBox的AutoCompleteCustomSource屬性指定為您構建的AutoCompleteStringCollection對象,否則不會生效。AutoCompleteStringCollection類似於list

【優質編程】團隊成員將為您答疑解惑,請給我們您寶貴的意見和建議。謝謝妳

QQ:176229432

補充回答:

首先我需要強調壹下,搜索的時候用拼音首字母可能更合適。

下面是我項目中壹個控件庫中的擴展組件的完整代碼,編譯成壹個組件,扔到其他ui中。所有的ComboBox和ListBox都會添加擴展屬性SearchOnKeyEnable,設置為true後可以自己看看效果。增加了關鍵音程判斷。如果兩個鍵之間的時間間隔短,則認為是壹個單詞的幾個單詞的首字母,如果時間間隔長,則認為是其他單詞的首字母。

另外需要註意的是,使用時請關閉AutoComplete相關屬性,設置DropDownStyle=DropDownList,效果最佳。

此代碼段僅供學習參考。希望妳能自己寫出更完美的代碼,而不是直接抄襲。

使用系統;

使用系統。組件模型;

使用系統。集合。泛型;

使用系統。診斷;

使用系統。文本;

使用系統。Windows . Forms

使用系統。數據;

命名空間!#您的命名空間#!

{

///& lt;總結& gt

/// ListControl擴展組件,使ListControl控件在按鍵後自動搜索並定位與所按按鍵匹配的項目。

///如果按“S”後能自動定位“深圳”

///& lt;/summary & gt;

[provide property(" SearchOnKeyPressedEnabled ",typeof(ListControl))]

公共分部類ListControlExtender : Component,IExtenderProvider

{

#區域私有字段

私人字典& ltListControl,屬性& gtproperties =新詞典& ltListControl,屬性& gt(7);

private StringBuilder sb keys = new StringBuilder(10);

private StringBuilder sb item = new StringBuilder(50);

private int twicePressKeyInterval = 500;//兩次擊鍵之間的時間間隔(單位:毫秒)

私有類屬性

{

public StringBuilder pressed keys;//鍵

公共日期時間PrevPressKeyTime//上次擊鍵時間

public bool SearchOnKeyPressedEnabled;//是否激活了鍵搜索?

公共屬性()

{

這個。pressed keys = new StringBuilder(10);

這個。PrevPressKeyTime = DateTime。現在;

這個。SearchOnKeyPressedEnabled = false;

}

}

#結束區域

#區域構造函數

公共ListControlExtender()

{

initialize component();

}

公共ListControlExtender(IContainer容器)

{

集裝箱。補充(這個);

initialize component();

}

#結束區域

#區域接口方法IExtenderProvider。CanExtend

bool IExtenderProvider。CanExtend(對象o)

{

if (o是ListControl)

{

返回true

}

返回false

}

#結束區域

#區域屬性定義

[類別(“設置”)]

[描述("兩次擊鍵之間的時間間隔(毫秒)")]

public int TwicePressKeyInterval

{

得到

{

返回this.twicePressKeyInterval

}

設置

{

this . twicepresskeyinterval = value & gt;0 ?值:0;

}

}

#結束區域

#區域私有函數

///& lt;總結& gt

///確保擴展屬性的菜單項在字典中。

///& lt;/summary & gt;

///& lt;param name = " key " & gt目標菜單項

///& lt;returns & gt擴展屬性

私有屬性確保屬性存在(ListControl鍵)

{

屬性p;

如果(屬性。ContainsKey(key))

{

p = properties[key];

}

其他

{

p =新屬性();

屬性。Add(鍵,p);

}

返回p;

}

///& lt;總結& gt

///獲取漢字的拼音首字母。

///& lt;/summary & gt;

///& lt;param name = " c " & gt漢字

///& lt;returns & gt拼音首字母

私有字符串GetFristPYLetterOfChar(字符串c)

{

嘗試

{

byte[] array =新字節[2];

數組=系統。text . encoding . default . getbytes(c);

int I =(short)(array[0]-' \ 0 ')* 256+((short)(array[1]-' \ 0 ');

//if(I & lt;0xB0A1)返回“*”;

如果(我& lt0xB0C5)返回“a”;

如果(我& lt0xB2C1)返回“b”;

如果(我& lt0xB4EE)返回“c”;

如果(我& lt0xB6EA)返回“d”;

如果(我& lt0xB7A2)返回“e”;

如果(我& lt0xB8C1)返回“f”;

如果(我& lt0xB9FE)返回“g”;

如果(我& lt0xBBF7)返回“h”;

如果(我& lt0xBFA6)返回“j”;

如果(我& lt0xC0AC)返回“k”;

如果(我& lt0xC2E8)返回“l”;

如果(我& lt0xC4C3)返回“m”;

如果(我& lt0xC5B6)返回“n”;

如果(我& lt0xC5BE)返回“o”;

如果(我& lt0xC6DA)返回“p”;

如果(我& lt0xC8BB)返回“q”;

如果(我& lt0cx8f 6)返回“r”;

如果(我& lt0xCBFA)返回“s”;

如果(我& lt0xCDDA)返回“t”;

如果(我& lt0xCEF4)返回“w”;

如果(我& lt0xD1B9)返回“x”;

如果(我& lt0xD4D1)返回“y”;

//if(I & lt;0xD7FA)返回“z”;

返回“z”;

}

捕捉

{

返回“*”;

}

}

///& lt;總結& gt

///獲取中文字符串的拼音首字母

///& lt;/summary & gt;

///& lt;param name = " str " & gt中文字符串

///& lt;returns & gt拼音首字母

私有字符串GetFirstPYLetterOfString(string str)

{

StringBuilder sb = new StringBuilder(100);

foreach(字符串中的字符c)

{

//字母和符號保持原樣。

if((int)c & gt;= 33 & amp& amp(int)c & lt;= 126)

某人(somebody的簡寫)append(c . ToString());

其他

某人(somebody的簡寫)append(GetFristPYLetterOfChar(c . ToString()));

}

歸還某人。ToString();

}

///& lt;總結& gt

///將列表控件集合項轉換為字符串。

///& lt;/summary & gt;

///& lt;param name = " listControl " & gt列表控件

///& lt;param name = " index " & gt收藏索引

///& lt;returns & gt轉換後的字符串

私有字符串ConvertListControlItemToString(list control list control,int index)

{

if (listControl是ComboBox)

{

//如果沒有綁定,就直接轉換成字符串。

if (listControl。數據源== null)

return(string)(((ComboBox)list control)。items[index]);

其他

{

//如果綁定了,就轉換成DataRowView,然後取對應的字段值。

datarow view view =(datarow view)(((ComboBox)list control)。items[index]);

if (((ComboBox)listControl)。顯示成員!=空)

返回轉換。ToString(view[((ComboBox)list control))。display member]);

else if (((ComboBox)listControl)。ValueMember!=空)

返回轉換。ToString(view[((ComboBox)list control))。value member]);

其他

返回“”;

}

}

else if (listControl是ListBox)

{

//如果沒有綁定,就直接轉換成字符串。

if (listControl。數據源== null)

return(string)(((ListBox)list control)。items[index]);

其他

{

//如果綁定了,就轉換成DataRowView,然後取對應的字段值。

datarow view view =(datarow view)(((ListBox)list control)。items[index]);

if((ListBox)list control)。顯示成員!=空)

返回轉換。ToString(視圖[((ListBox)listControl))。display member]);

else if((ListBox)list control)。ValueMember!=空)

返回轉換。ToString(視圖[((ListBox)listControl))。value member]);

其他

返回“”;

}

}

其他

{

返回“”;

}

}

///& lt;總結& gt

///列表控件的按鍵事件處理程序

///& lt;/summary & gt;

///& lt;param name = " sender " & gt列表控件

///& lt;param name = " e " & gt參數

private void list control _ KeyPress(對象發送方,KeyPressEventArgs e)

{

list control list control =(list control)sender;

//清除密鑰字符串

sbKeys。移除(0,sbKeys。長度);

//獲取當前時間

現在日期時間=日期時間。現在;

//獲取上次按鍵的時間差。

TimeSpan span = now-properties[list control]。PrevPressKeyTime

//如果兩次擊鍵的時間差小於TwicePressKeyInterval,則認為按了多個鍵。

如果(span。total毫秒& lttwicePressKeyInterval)

{

properties[list control]. pressed keys . append(e . key char . tostring());

sbKeys。append(properties[list control]. pressed keys . tostring());

}

否則//否則,按壹個鍵。

{

sbKeys。append(e . key char . tostring());

properties[list control]. pressed keys . remove(0,properties[list control]. pressed keys . length);

properties[list control]. pressed keys . append(sb keys。ToString());

}

//更新按鍵時間

屬性[listControl]。PrevPressKeyTime = now

//記錄初始索引值

int oldIndex = listControl。SelectedIndex

int newIndex = oldIndex

//獲取列表項的數量

int item count = 0;

if (listControl是ComboBox)

item count =((ComboBox)list control). items . count;

其他

item count =((ListBox)list control). items . count;

//首先從當前位置向後搜索。

bool match = false

for(int I = ol index+1;我& ltitemCounti++)

{

//空的

sbItem。移除(0,sbItem。長度);

//獲取列表項字符串

//改為調用將列表控件集合項轉換為字符串的方法。2007-08-13

sbItem。append(ConvertListControlItemToString(list control,I));

//比較鍵是否與列表項的第壹個字母匹配。

如果(sbKeys。長度& ltsbItem。長度)

match = GetFirstPYLetterOfString(sb item。ToString())。IndexOf(sbKeys。ToString())= = 0;

其他

match = sbKeys。ToString()。index of(GetFirstPYLetterOfString(sbItem。ToString()))= = 0;

如果(匹配)

{

new index = I;

打破;

}

}

if((new index = = old index)& amp;& amp(oldIndex & gt0)) //如果沒有找到,則從0開始搜索。

{

for(int I = 0;我& lt= oldIndexi++)

{

//空的

sbItem。移除(0,sbItem。長度);

//獲取列表項字符串

//改為調用將列表控件集合項轉換為字符串的方法。2007-08-13

sbItem。append(ConvertListControlItemToString(list control,I));

//比較鍵是否與列表項的第壹個字母匹配。

如果(sbKeys。長度& ltsbItem。長度)

match = GetFirstPYLetterOfString(sb item。ToString())。IndexOf(sbKeys。ToString())= = 0;

其他

match = sbKeys。ToString()。index of(GetFirstPYLetterOfString(sbItem。ToString()))= = 0;

如果(匹配)

{

new index = I;

打破;

}

}

}

listControl。SelectedIndex = newIndex

}

#結束區域

#region在按鍵時激活搜索功能。

[描述(“按鍵時是否要激活搜索功能”)]

[類別(“擴展”)]

public bool GetSearchOnKeyPressedEnabled(list control list control)

{

properties p = EnsurePropertiesExists(list control);

返回p . SearchOnKeyPressedEnabled

}

public void SetSearchOnKeyPressedEnabled(list control list control,bool值)

{

properties p = EnsurePropertiesExists(list control);

頁(page的縮寫)SearchOnKeyPressedEnabled = value;

如果(值)

listControl。KeyPress+= new KeyPress eventhandler(list control _ KeyPress);

其他

listControl。KeyPress-= new KeyPress eventhandler(list control _ KeyPress);

}

#結束區域

}

}

最後,我還想指出,自動完成和初始查詢定位不能混用。

假設combobox的子項為,當按下S鍵時,只能展開combobox,然後定位到“陜西”,不可能也不應該同時改變combobox的顯示字符串。輸入的s可以刪除,但是我不能決定是應該加上‘山’還是‘山’這個字。不能確定首字,所以不能用自動加/補。

所以這裏我只能建議妳用經典的方式,也就是上面代碼實現的功能:dropdownlist,點擊展開列表,按鍵定位合適的行;或者在有焦點的時候直接輸入拼音首字母,直接填充,不需要展開列表。

有問題請留言!