В настоящее время у меня есть ComboBox в моем приложении Windows Forms. Чтобы указать, какие значения будет содержать ComboBox, я устанавливаю свойство DataSource для ComboBox для некоторого массива, чтобы ComboBox содержал значения из этого массива. Я мог бы также использовать Items.Add()
для добавления новых значений в ComboBox. Однако я хочу убедиться, что ComboBox может быть заполнен объектами определенного типа. Итак, если у меня есть класс под названием X, то я хочу сделать так, чтобы в качестве источника данных для ComboBox можно было использовать только массив типа X. Сейчас ComboBox принимает объекты типа System.Object
. Как я могу это достичь? Есть ли свойство ComboBox, которое мне нужно установить равным имени моего типа данных? Или есть событие, которое проверяет, имеет ли объект, добавленный в мой ComboBox, необходимый тип, и будет ли исключение, если нет?Сделать ComboBox только для определенного типа
Я думал о создании нового класса как подтип ComboBox, и перекрывая Add
метод Items
собственности таким образом, чтобы добавить проверяет, является ли ее аргумент необходимого типа (не уверен, если и как я могу это сделать). Даже если я это сделаю, есть еще другие способы добавить новые значения в ComboBox (AddRange
, CopyTo
и т. Д.), Поэтому я думаю, что должно быть более элегантное решение этой проблемы.
Идея, которую вы хотите, возможна, но вы хотите, чтобы кто-то из нас? Попробуйте создать это поле со списком, и после этого напишите, если у вас есть проблемы. – mybirthname
@mybirthname - Нет, я просто хотел узнать, следует ли переопределить метод Add ComboBox.ObjectCollection или, если есть более элегантный способ сделать это, так как технически мне также необходимо переопределить другие методы, которые могут добавлять новые значения в ComboBox, например AddRange. – user3623874
вы не можете скрыть или переопределить 'Items' to * only * принять ваш новый тип, даже если вы наследуете его; но вы можете попробовать обернуть его в UserControl и открыть коллекцию новых элементов. Было бы много кода для эмуляции/имитации существующих свойств и коллекций. Конечно, CBo уже примет ваш конкретный тип, juts not * only *, который Type – Plutonix