如何强制用户将建议的条目带入ComboBox?

时间:2011-10-13 20:12:01

标签: c# winforms user-interface .net-4.0 combobox

我希望用户从ComboBox中选择一个值。必须在用户的文本输入中建议 条目。

我是否必须使用事件来强制System.Windows.Forms.ComboBox包含自己DataSource的值?

示例:必须向用户建议条目...如果我写“CO”,组合应该建议“CONGO”和“COLOMBIA”,但这些值中只有一个应该是由用户输入。用户不应该引入“COfdfgdfg”或任何随机字符串。

谢谢!

2 个答案:

答案 0 :(得分:6)

将组合框的样式设置为ComboBoxStyle.DropDownList

答案 1 :(得分:4)

你必须使用combobox.autocompletemode来获取名字liek Congo,当用户输入“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);

然后使用覆盖ToString方法的对象填充combox项目源

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

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

编辑:您必须对用户在组合框中输入的文本进行验证,如果用户选择auto completemode建议的下拉项,则验证返回true,否则返回false ... < / p>

执行以下操作......

为组合框创建一个KeyDown事件处理程序并检查Enter键。请注意,在用户点击输入后,选择组合框中的文本(如选择,就像您正在进行剪切或复制操作一样)并且焦点保留在组合框中。

如果输入被按下,则调用验证函数,如果输入的值与存储在数据库中的名称相等,它将执行您认为必要的任何操作...

您可以在Leave事件处理程序中调用此相同的函数,以防止用户在进行有效选择之前离开组合框。

 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();
    }
 }