将两个列表绑定到组合框,其中一个仅用于提示

我正在创建一个生日通知程序,同时也是一个编辑器,可以将庆典添加到“数据库”中。 编辑器可以使用3个组合框 - 一个用于日,月和年。

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

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

我目前的Combobox设置是:

  • AutoCompleteMode:SuggestAppend
  • AutoCompleteSource:ListItems
  • DropDownStyle:DropDownList
  • 项目:月份名称(1月 - 12月)
  • 提前感谢您的任何建议。


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

    假设你已经考虑过其他选择,比如日历控件,你可以尝试在组合框上捕获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月。

    链接地址: http://www.djcxy.com/p/60909.html

    上一篇: Bind two lists to combobox, one only for suggestions

    下一篇: How to disable combox dropdown when user enters text into the combox