ComboBox Items 值已切换

ComboBox Items values are switched

我在 Winform 应用程序上有一个组合框,其中包含匹配 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());

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

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

如果要对值进行排序,则必须通过字典对它们进行排序。

或者,可能最好,就像@Andy 指出的那样,使用 SortedDictionary。 当然,我测试过并且它有效。谢谢@Andy。 :)