我正在为生日通知创建一个程序,并且还将编辑器添加到“数据库”中。编辑器使用3个组合框 - 一个用于日,月和年。
目前的情况是用户可以使用数字键盘设置日期和年份,但在月份的情况下,他必须写月份名称或用鼠标从滚动菜单中选择一项。
一个理想的情况是用户只能使用标签(由TabIndex解决)和数字键盘 - 月份组合框后面的建议将基于两个(以某种方式连接)列表 - 月份名称(1月,2月,... )和月份数字(1,2,...) - 而唯一的一个(命名的)将是可见的 - 这样用户就有机会写“j”或“1”来选择“1月”项目。 这可能吗?
我目前的Combobox设置是:
提前感谢任何建议。
答案 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月。