У меня есть пользовательский элемент управления списком, который должен отображать список доступных веб-камер.
Код довольно крошечный.
using System;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using DirectShowLib;
namespace CameraSelectionCB
{
public partial class CameraComboBox : ComboBox
{
protected BindingList<string> Names;
protected DsDevice[] Devices;
public CameraComboBox()
{
InitializeComponent();
Devices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
Names = new BindingList<string>(Devices.Select(d => d.Name).ToList());
this.DataSource = Names;
this.DropDownStyle = ComboBoxStyle.DropDownList;
}
}
}
Однако я столкнулся с парой ошибок,Во-первых, всякий раз, когда я помещаю экземпляр этого комбинированного списка, конструктор генерирует следующий код:
this.cameraComboBox1.DataSource = ((object)(resources.GetObject("cameraComboBox1.DataSource")));
this.cameraComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cameraComboBox1.Items.AddRange(new object[] {
"HP Webcam"});
, что приводит к исключению во время выполнения, поскольку элементы не должны изменяться, когда установлен DataSource.Это происходит, даже если я не касаюсь свойства Items в конструкторе.
"Веб-камера HP" - единственная камера, присутствующая на моем компьютере в то время.
Как я могу подавить такое поведение?