Мэтт, вот некоторые детали, которые могут быть вам полезны, если вы продолжите.
Я использовал комбо-боксы в нескольких местах в моих формах именно так, как вы упомянули.
В дополнение к средству добавления вы также можете предоставить пользователю параметры редактирования и удаления, где пользователь может редактировать / переименовывать и удалять комбинированные записи. Тем не менее, при предоставлении этой функции вам нужно быть предельно осторожным с выбранным индексом, поскольку он может стать довольно грязным.
В моем случае у меня есть три следующих пункта, чтобы позаботиться обо всех вышеупомянутых функциях:
- Поле со списком с DropDownStyle =
DropDown
- Кнопка сохранения
- Кнопка удаления
Функциональность выглядит следующим образом:
В поле со списком в дополнение к элементам, уже сохраненным пользователем, у меня есть элемент - Новый - вверху.
Когда пользователь должен отредактировать / переименовать элемент, он должен выбрать элемент из комбинированного списка, ввести новое имя в комбинированном списке и нажать «Сохранить».
Если пользователь хочет добавить новый элемент, он должен выбрать --New-- из комбо, ввести имя в комбо (это перезапишет --New--) и нажать Save
Если пользователю необходимо удалить элемент, он должен просто выбрать элемент и нажать «Удалить»
Я реализовал событие SelectionChangeCommitted , а не SelectedIndexChanged , так как последнее запускает событие, если выбранный индекс устанавливается через код, тогда как первое только, когда пользователь выбирает элемент в поле со списком с экрана.
Кроме того, я сохранил переменную уровня формы под названием _selectedComboID , в которой хранится идентификатор выбранного в данный момент комбинированного элемента. Он устанавливается в обработчике событий SelectionChangeCommitted. Это потому, что если вам нужно переименовать запись в комбо, вы сначала выберите ее. В это время selectedIndex является правильным (тот, который вы выбрали). Затем, поскольку вам нужно переименовать его, вы отредактируете текст со списком и нажмите «Сохранить». Однако, так как вы отредактировали имя, оно теперь портится с выбранным индексом. Поэтому я сохраняю его в переменной перед тем, как пользователь сделает выбор.
В методе Save я проверил, совпадает ли _selectedComboID с идентификатором для --New--. Если да, код вставки запускается, иначе код редактирования. В обоих случаях необходимо проверить, что выбранное пользователем имя еще не существует, в дополнение к другим проверкам.
Если вы устанавливаете Sorted = true для вашего поля со списком, очень важно использовать SelectedItem во всем коде, а не SelectedValue. Это связано с тем, что когда вы устанавливаете сортировку как true для поля со списком, он портит выбранные значения. Вы можете обратиться к моему сообщению на Настройка выбранного элемента в ListBox без цикла для получения подробной информации.
Ух, это было здорово !!! Надеюсь, это поможет:)