.net 为值的更改和添加触发的ComboBox事件

.net 为值的更改和添加触发的ComboBox事件,.net,winforms,user-interface,.net,Winforms,User Interface,假设我有一个C#.NET windows窗体应用程序,它带有一个组合框,可以选择字符串值,还可以接受新值的输入 在以下情况下,触发事件处理方法的最有效方法是什么 选择组合框的先前存在的值,或 是否在组合框中键入/输入新输入的值 我尝试过SelectedIndexChanged事件之类的选项,但当有新输入的值时,我似乎无法触发事件。我认为这是一件相当简单的事情,但我不确定 我可以按Enter键,但这似乎是一个半途而废的假设,即这意味着更新。我会使用组合框\u SelectedIndexChan

假设我有一个C#.NET windows窗体应用程序,它带有一个组合框,可以选择字符串值,还可以接受新值的输入

在以下情况下,触发事件处理方法的最有效方法是什么

  • 选择组合框的先前存在的值,或
  • 是否在组合框中键入/输入新输入的值
我尝试过SelectedIndexChanged事件之类的选项,但当有新输入的值时,我似乎无法触发事件。我认为这是一件相当简单的事情,但我不确定


我可以按Enter键,但这似乎是一个半途而废的假设,即这意味着更新。

我会使用
组合框\u SelectedIndexChanged
来更改所选项目

我还将捕获
组合框\u Leave
事件,以检查项目是否是新的(列表中不存在)。这将满足输入、制表键和鼠标点击的需要,从而从组合框中切换焦点


还可以查看“filterable DataGridViews”,在web上有一些msdn和codeproject文章会有所帮助。

在不知道您的全部要求的情况下,我怀疑组合框是否是合适的控件。我的第一个观察结果是,允许用户动态输入新的组合框项目是打开潘多拉盒子的一种可能。我可以很容易地看到重复的项目,从一个简单的拼写错误和其他用户的滑稽动作,这是注定要发生的。这将是一个头痛的未来

正如@Jeremy Thompson所建议的,连接组合框“离开”事件可能会有所帮助,您可以使用
ComboBox.Text
属性获取用户键入的新文本,然后检查它是否已经存在且不为空或null,然后将其添加到组合框项目列表中。这应该行得通,但我猜可能有更好的方法来实现你的目标。用户将在组合框中键入什么

private void comboBox1_Leave(object sender, EventArgs e) {
  string currentSelection = comboBox1.Text;
  if (currentSelection != null && currentSelection != "" && !comboBox1.Items.Contains(currentSelection)) {
    comboBox1.Items.Add(currentSelection);
  }
}

这里的上下文是combobox选择并存储过滤字符串,过滤附近UI组件的内容。需要输入新的过滤器,还需要选择以前使用的过滤器值。