将两个列表绑定到组合框,一个仅用于建议

时间:2017-11-16 11:12:16

标签: c# winforms combobox autosuggest

我正在为生日通知创建一个程序,并且还将编辑器添加到“数据库”中。编辑器使用3个组合框 - 一个用于日,月和年。

目前的情况是用户可以使用数字键盘设置日期和年份,但在月份的情况下,他必须写月份名称或用鼠标从滚动菜单中选择一项。

一个理想的情况是用户只能使用标签(由TabIndex解决)和数字键盘 - 月份组合框后面的建议将基于两个(以某种方式连接)列表 - 月份名称(1月,2月,... )和月份数字(1,2,...) - 而唯一的一个(命名的)将是可见的 - 这样用户就有机会写“j”或“1”来选择“1月”项目。 这可能吗?

我目前的Combobox设置是:

  • AutoCompleteMode:SuggestAppend
  • AutoCompleteSource:ListItems
  • DropDownStyle:DropDownList
  • 项目:月份名称(1月至12月)

提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

就个人而言,我认为我不希望列表框响应两个列表。如果我看到一个月份列表作为文本,我不希望能够按编号选择它们。但这完全有可能只是我: - )

假设您已经考虑了替代方案,例如日历控件,您可以尝试在这样的组合框上捕获KeyDown事件吗?

private string keysTyped = string.Empty;

private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
  KeysConverter conv = new KeysConverter();

  this.keysTyped+=conv.ConvertToString(e.KeyCode).Replace("NumPad", "");

  int numTyped;
  while (int.TryParse(this.keysTyped, out numTyped))
  {
    if (numTyped <= 12)
    {
      this.comboBox1.SelectedIndex = numTyped - 1;
      break;
    }
    this.keysTyped = this.keysTyped.Substring(1);
  }
}

这似乎适用于我所做的最小测试,而我认为它回答了这个问题,但它确实感觉有点复杂,这通常让我怀疑我是否正在尝试做一些我不应该做的事。但如果这是你需要的......

请注意,它之所以复杂,是因为它的设计使它能够接受两个数字而不仅仅是一个数字。有不止一种方法可以做到这一点,但上述内容似乎最简单。因此,如果您输入“1”然后输入“2”,它将选择12月。