ComboBox项目值已切换

时间:2015-06-29 10:29:15

标签: c# winforms combobox

我在Winform应用程序上有一个ComboBox,其中包含一个匹配date格式的正则表达式列表。我使用字典加载ComboBox,因此我可以显示匹配模式的示例,并将实际正则表达式设为SelectedValue

  Dictionary<string, string> datePatternsSource = new Dictionary<string, string>();

  datePatternsSource.Add(@"dd-MMM-yy (05-SEP-15)", @"((\d{2})(\-)(\w{3})(\-)(\d{2}))");
  datePatternsSource.Add(@"yyyy-MM-dd (2015-09-05)", @"((\d{4})(\-)(\d{2})(\-)(\d{2}))");
  datePatternsSource.Add(@"MM/dd/yyyy (09/05/2015)", @"((\d{2})(\/)(\d{2})(\/)(\d{4}))");
  datePatternsSource.Add(@"M/d/yyyy (9/5/2015)", @"((\d{1,2})(\/)(\d{1,2})(\/)(\d{4}))");
  datePatternsSource.Add(@"yyyy/MM/dd (2015/09/05)", @"((\d{4})(\/)(\d{2})(\/)(\d{2}))");

  cboDatePatterns.DisplayMember = "Key";
  cboDatePatterns.ValueMember = "Value";
  cboDatePatterns.DataSource = new BindingSource(datePatternsSource, null);

问题是两个正则表达式与正确的示例不匹配。为了演示我调用MessageBox.Show()方法来显示组合框属​​性。

MessageBox.Show("SelectedItem = " + cboDatePatterns.SelectedItem.ToString() + "\nSelectedValue = " + cboDatePatterns.SelectedValue.ToString());

The comboBox Correct match Incorrect match

如何切换这些值?五个项目中的三个正确匹配。其中两个已切换。

1 个答案:

答案 0 :(得分:2)

查看此处:https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.sorted%28v=vs.110%29.aspx后,我发现如果在设计时将数据绑定组合框中的Sorted设置为true,则会出现此行为,而如果您在运行时设置它,设置数据绑定后,引发参数异常。因此,Sorted不能与数据绑定组合框一起使用...

如果要对值进行排序,则必须通过“词典”对其进行排序。

或者,或许最好,就像@Andy指出的那样,使用SortedDictionary。 当然,我测试了它并且它起作用了。谢谢@Andy。 :)