取消选择组合框项

本文关键字:组合 选择 取消 | 更新日期: 2023-09-27 18:18:05

我有一个数据绑定组合框:

using(DataContext db = new DataContext())
{
    var ds = db.Managers.Select(q=> new { q.ManagerName, q.ManagerID});
    cmbbx_Managers.BindingContext = new BindingContext();
    cmbbx_Managers.DataSource = ds;
    cmbbx_Managers.DisplayMember = "ManagerName";
    cmbbx_Managers.ValueMember = "ManagerID";
}

当表单加载时,两个项目都没有被选中,但是当用户选择了一个项目时,它不能被取消选中。我尝试添加cmbbx_Managers.items.Insert(0, "none"),但是没有解决问题,因为无法在数据绑定组合框中添加新项目。

如何允许用户取消选择combobox项?

取消选择组合框项

在下拉组合框中"取消选择"项的方法是选择一个不同的项。

没有"取消选择"选项的组合框-总有一些东西必须被选中。如果你想模拟没有被选中的行为,你需要在ComboBox中添加一个<none>项目(或等效的)。当用户想要"取消选择"时,可以选择此选项。

默认情况下,ComboBox出现时没有选择任何项,这是糟糕的设计,因为用户永远无法重新创建该状态。你不应该让这种事发生。在控件(或父窗体)的初始化器中,始终将ComboBox设置为默认值。

如果你真的需要一个允许清除当前选择的小部件,那么你应该使用ListView或ListBox控件来代替

要向数据绑定组合框添加一个项目,您需要将您的项目添加到绑定到组合框的列表中。

var managers = managerRepository.GetAll();
managers.Insert(0, new Manager() { ManagerID = 0, ManagerName = "(None)");
managersComboBox.DisplayMember = "ManagerName";
managersComboBox.ValueMember = "ManagerID";
managersComboBox.DataSource = managers;

因此,要取消选择,您现在只需设置 ComboBox.SelectedIndex = 0 ,否则,使用 BindingSource.CurrencyManager

另外,需要根据@RamonAroujo在他的评论中给我们带来的精度在最后一行设置DataSource属性。

如果用户按下Esc键,要取消选择一个项目,您可以订阅comboxkeydown事件并将所选索引设置为none。

private void cmbbx_Managers_KeyDown(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Escape && !this.cmbbx_Managers.DroppedDown)
  {
    this.cmbbx_Managers.SelectedIndex = -1;
  }
}