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。 :)
我在 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。 :)