取消选择组合框项
本文关键字:组合 选择 取消 | 更新日期: 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;
}
}