2011-10-13 74 views
3

我想讓用戶從ComboBox中選擇一個值。在用戶的文本輸入處必須建議條目如何強制用戶將建議的條目插入ComboBox?

是否必須使用事件來強制System.Windows.Forms.ComboBox包含自己的DataSource的值?

例:參賽作品必須向用戶建議...如果我寫的「CO」,組合應建議「剛果」和「哥倫比亞」,但只有其中一個值應該由用戶輸入。用戶不應該引入「COfdfgdfg」或任何隨機字符串。

謝謝!

+2

Combobox.DropDownStyle(我相信) –

回答

4

你必須使用combobox.autocompletemode得到liek剛果,國會的名字,當用戶輸入如「CO」

您可以在自己的文字數據源到comboBox1.AutoCompleteSource

this.comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; 
this.comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; 
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
this.comboBox1.FormattingEnabled = true; 
this.comboBox1.Location = new System.Drawing.Point(113, 192); 
this.comboBox1.Name = "comboBox1"; 
this.comboBox1.Size = new System.Drawing.Size(121, 20); 

然後用類似對象填充COMBOX項目源,即重寫ToString方法

public class POCLRO 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 

    public override string ToString() 
    { 
    return Name; 
    } 
} 

編輯:你必須做在組合框中用戶輸入的文本驗證,如果用戶選擇下拉菜單項通過自動completemode建議的驗證返回true,否則返回false ...

待辦事項像下面的東西...

爲組合框創建KeyDown事件處理程序並檢查Enter鍵。請注意,在用戶點擊輸入組合框中的文本被選中(如在選擇,就好像您正在執行剪切或複製操作一樣)並且焦點仍保留在組合框中。

如果輸入按下調用驗證函數,將做任何你覺得必要的,如果輸入的值與存儲在數據庫名稱相同...

您可以致電此相同功能的離開事件處理程序以防止用戶在進行有效選擇之前離開組合框。

private void ComboBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     ValidateSelection(); 
    } 
} 

private bool validation() 
{ 
    // do validation here 
} 
private void ComboBox_Leave(object sender, EventArgs e) 
{ 
    if(!ValidateSelection()) 
    { 
     ComboBox.Focus(); 
    } 
} 
+0

我做了一些像你的例子...但只有離開事件......謝謝! – JPCF

6

將組合框的樣式ComboBoxStyle.DropDownList

+0

參賽作品必須向用戶建議...如果我寫的「CO」,組合應建議「剛果」和「哥倫比亞」,但僅此值之一應該由用戶輸入。用戶不應該引入「COfdfgdfg」或任何隨機字符串。 – JPCF

+0

@JuanPabloContreras你必須使用像combobox屬性combobox.autocompletemode屬性來獲得這些建議.. –

+0

@errorstacks是的,我知道......我的意思是,我需要選擇的建議是以前包含在DataSource – JPCF

相關問題