ComboBox - 自动完成 + 自由打字
ComboBox - AutoComplete + Free typing
如果用户输入的内容在项目列表中,我希望我的组合框启用自动完成功能,如果它不存在,我想将其包含在我的列表中。
例如:
包含以下项目的组合框:"Rock, Country, Jazz"。
如果用户开始输入 "Ro...",组合框会自动完成 'Rock'。但是如果用户键入 "Blues",我想将其添加到我的项目中。所以它会像:"Rock, Country, Jazz, Blues".
我该怎么做?
您可以使用 AutoCompleteMode 和 AutoCompleteSource 进行自动完成。
comboBox1.AutoCompleteMode = AutoCompleteMode.Append;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
或者您可以在选择 ComboBox 后通过 Visual Studio 中的属性面板执行此操作...
用于向您的 ComboBox 添加新项目;
private void comboBox1_TextChanged(object sender, EventArgs e)
{
if (!comboBox1.Items.Contains(comboBox1.Text))
{
comboBox1.Items.Add(comboBox1.Text);
comboBox1.Items.RemoveAt(comboBox1.Items.Count - 2);
}
}
如果我使用 MVVM 执行此操作,我会从 ComboBox
开始并修改它以适应。
如果您使用 DevExpress
中的内置 ComboBox
,您几乎可以免费获得它。只需在下拉列表中填入您想要自动完成的项目,然后设置选项:
- 自动下拉(所以当您开始输入时,它会自动下拉匹配列表)。
- 按匹配过滤列表(即下拉列表中的唯一项目将是与您输入的内容匹配的项目)。
- 部分匹配(即您输入的内容将过滤下拉列表,在任何地方匹配,甚至在中心)。
如果您想变得更高级,您可以编写一个服务来侦听用户当前在框中键入的内容,然后调整下拉项列表以适应。下拉列表中与用户类型匹配的任何项目将自动显示。我会使用 Reactive Extensions (RX) 和 Throttle
来做到这一点,请参阅:
- How to throttle event stream using RX?
- The difference between Rx Throttle(...).ObserveOn(scheduler) and Throttle(..., scheduler)。
如果用户输入的内容在项目列表中,我希望我的组合框启用自动完成功能,如果它不存在,我想将其包含在我的列表中。
例如:
包含以下项目的组合框:"Rock, Country, Jazz"。 如果用户开始输入 "Ro...",组合框会自动完成 'Rock'。但是如果用户键入 "Blues",我想将其添加到我的项目中。所以它会像:"Rock, Country, Jazz, Blues".
我该怎么做?
您可以使用 AutoCompleteMode 和 AutoCompleteSource 进行自动完成。
comboBox1.AutoCompleteMode = AutoCompleteMode.Append;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
或者您可以在选择 ComboBox 后通过 Visual Studio 中的属性面板执行此操作...
用于向您的 ComboBox 添加新项目;
private void comboBox1_TextChanged(object sender, EventArgs e)
{
if (!comboBox1.Items.Contains(comboBox1.Text))
{
comboBox1.Items.Add(comboBox1.Text);
comboBox1.Items.RemoveAt(comboBox1.Items.Count - 2);
}
}
如果我使用 MVVM 执行此操作,我会从 ComboBox
开始并修改它以适应。
如果您使用 DevExpress
中的内置 ComboBox
,您几乎可以免费获得它。只需在下拉列表中填入您想要自动完成的项目,然后设置选项:
- 自动下拉(所以当您开始输入时,它会自动下拉匹配列表)。
- 按匹配过滤列表(即下拉列表中的唯一项目将是与您输入的内容匹配的项目)。
- 部分匹配(即您输入的内容将过滤下拉列表,在任何地方匹配,甚至在中心)。
如果您想变得更高级,您可以编写一个服务来侦听用户当前在框中键入的内容,然后调整下拉项列表以适应。下拉列表中与用户类型匹配的任何项目将自动显示。我会使用 Reactive Extensions (RX) 和 Throttle
来做到这一点,请参阅:
- How to throttle event stream using RX?
- The difference between Rx Throttle(...).ObserveOn(scheduler) and Throttle(..., scheduler)。