我正在学习WinForm,在最近的实践中,我想实现这样的功能: 一个ComboBox,其中包含一些其他控件。 ComboBox的DisplayMember是每个控件的“名称”,ValueMember是其控件的“句柄”。 像这样。
但是,它不能很好地工作,当我调试时,我发现绑定数据源后,DisplayMember显示一个空字符串。
如果我将其设置为“ Handle”,则ValueMember设置也会显示错误。
使用这两个属性是否有任何规则?
代码如下。
cmbAllControls.DataSource = allControlsList;//DataSource, List<Control>.
cmbAllControls.DisplayMember = "Name";
cmbAllControls.ValueMember = "TabIndex";//TabIndex is OK, but Handle will throw error.
答案 0 :(得分:0)
似乎与Handle上的Browseable(假属性)有关。当我尝试下面的代码时,如果删除属性,但会因ArgumentException“无法绑定到新的值成员”而崩溃,工作正常。
public Form1()
{
InitializeComponent();
comboBox1.DataSource = new List<MyObj>()
{
new MyObj(){Name = "Fish",MyInt = 3,MyIntPtr = new IntPtr(5),MyIntPtr2 = new IntPtr(7)}
};
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "MyIntPtr";
comboBox1.ValueMember = "MyIntPtr2";
comboBox1.SelectedIndexChanged += (s, e) => { MessageBox.Show("Selected:" + comboBox1.SelectedValue); };
}
private class MyObj
{
public string Name { get; set; }
public int MyInt { get; set; }
public IntPtr MyIntPtr { get; set; }
[System.ComponentModel.Browsable(false)] //This attribute causes the error
public IntPtr MyIntPtr2 { get; set; }
}