2015-06-29 17 views
1

У меня есть ComboBox в приложении Winform, который содержит список регулярных выражений, которые соответствуют форматам date. Я загружаю ComboBox с помощью Dictionary, поэтому я могу отобразить пример совпадающего шаблона и иметь фактическое регулярное выражение как SelectedValue.ComboBox Значения элементов переключаются

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() для отображения свойств combobox.

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

The comboBox Correct match Incorrect match

Как может быть переключен эти значения? Три из пяти элементов соответствуют правильному. Два из них переключаются.

+1

Я просто использовал ваш код, и он работает без проблем для меня. Нет «переключения» значений ... – Jauch

+2

Действительно ли 'Sorted' соответствует вашему ComboBox? – Andy

+0

Вау ... @ Энди, я меняю Сортировку на истину и смог воспроизвести поведение, указанное веб-червем. Я бы не ожидал, что это произойдет ... Это так и должно быть? – Jauch

ответ

2

Посмотрев здесь: https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.sorted%28v=vs.110%29.aspx, я обнаружил, что если вы установите Sorted в true на DataBound комбобоксе на DesignTime, у вас есть такое поведение, в то время как если вы установите его во время выполнения, после того, как с привязкой к данным был установлен, вы поднимаете аргумент исключение. Таким образом, Сортировка не должна использоваться с привязкой к данным ...

Если вы хотите, чтобы значения были отсортированы, вам необходимо отсортировать их через Словарь.

Или, возможно, лучше всего, как указано @Andy, используя SortedDictionary. Я тестировал, и это сработало, конечно. Спасибо @ Энди. :)

+0

Возможно, https://msdn.microsoft.com/de-de/library/f7fta44c(v=vs.110).aspx тоже будет работать? – Andy

+1

Да. Очень приятно :) – Jauch

+0

Спасибо! Очень приятно найти. Я не думаю, что когда-нибудь придумал бы это. – webworm

Смежные вопросы