C# 在组合框中将枚举选择为SelectedItem
在winforms组合框中,我很难选择合适的项。之前我已经详细描述了,但我认为这个问题仍然没有解决,因为我使用一个表单来添加/编辑记录。所以在表格上我有C# 在组合框中将枚举选择为SelectedItem,c#,.net,winforms,C#,.net,Winforms,在winforms组合框中,我很难选择合适的项。之前我已经详细描述了,但我认为这个问题仍然没有解决,因为我使用一个表单来添加/编辑记录。所以在表格上我有 private void AddEditForm_Load(object sender, EventArgs e) { PopulateComboBoxLanguage(); } private void PopulateComboBoxLanguage() { comboBoxLang.DataSource
private void AddEditForm_Load(object sender, EventArgs e)
{
PopulateComboBoxLanguage();
}
private void PopulateComboBoxLanguage()
{
comboBoxLang.DataSource = Enum.GetValues(typeof(Book.EnumLang));
}
在编辑操作中,我想用现有数据填充表单,所有内容都会按应有的方式填充,除了始终显示EnumLang中第一项的combobox。
从我的第二个构造函数中,我调用PopulateWithExisingData(book)
comboBoxLang.SelectedItem = book.Language;
但即使在传递book.Language
时设置为德语SelectedItem
在调试模式下也始终为空
p、 我用
comboBoxLang.SelectedItem=(book.EnumLang)book.Language进行了尝试代码>也与SelectedValue相同,但保持不变
再一次,我想问题是在页面加载时填充组合框,但我不知道是什么问题以及如何解决
请询问更多信息。设置数据源时,会传递一个对象数组。
设置SelectedItem时,会传递一个枚举值,因此它会再次装箱到对象。ComboBox使用方法IndexOf在数据源值中搜索您的项,该方法使用方法Object.Equals将这些值与新值进行比较。由于它们是不同的对象(引用不同),因此在数据源集合中找不到您的项,因此选择不会更改。设置数据源时,会传递一个对象数组。
设置SelectedItem时,会传递一个枚举值,因此它会再次装箱到对象。ComboBox使用方法IndexOf在数据源值中搜索您的项,该方法使用方法Object.Equals将这些值与新值进行比较。由于它们是不同的对象(引用不同),因此在数据源集合中找不到您的项,因此选择不会更改。设置数据源时,会传递一个对象数组。
设置SelectedItem时,会传递一个枚举值,因此它会再次装箱到对象。ComboBox使用方法IndexOf在数据源值中搜索您的项,该方法使用方法Object.Equals将这些值与新值进行比较。由于它们是不同的对象(引用不同),因此在数据源集合中找不到您的项,因此选择不会更改。设置数据源时,会传递一个对象数组。
设置SelectedItem时,会传递一个枚举值,因此它会再次装箱到对象。ComboBox使用方法IndexOf在数据源值中搜索您的项,该方法使用方法Object.Equals将这些值与新值进行比较。由于它们是不同的对象(引用不同),因此在数据源集合中找不到您的项,因此选择不会更改
声明要在表单中添加/编辑的对象类型的实例
向表单中添加bool isEdit并将其设置为false
添加方法public void Initialize(ObjectType name)
Initialize方法应将表单实例设置为该参数,并应设置布尔标志isEdit=true
将加载数据/填充控件(如组合框)的所有代码放入表单加载事件中
在加载事件的底部,在填充控件后执行以下操作:
if (isEdit)
{
//Set your controls selected values from the object you are editing
}
现在,对于新对象,只需制作表单并在其上调用Show或ShowDialog即可。这将导致Load事件触发,并填充控件
要进行编辑,请创建表单,调用Initialize,然后执行Show/ShowDialog。由于Initialize方法将isEdit设置为true,加载事件底部的if(isEdit)代码块将被命中,控件值将被设置为与正在编辑的对象的属性相等
下面是一些非常简单的示例代码:
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//This is simulating an add...First Language will be displayed on form2,
//which is English
Form2 form = new Form2();
form.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
//This is simulating an edit...this will display french
//(or whatever is passed in)
Form2 form = new Form2();
form.Initialize(Languages.French);
form.ShowDialog();
}
声明要在表单中添加/编辑的对象类型的实例
向表单中添加bool isEdit并将其设置为false
添加方法public void Initialize(ObjectType name)
Initialize方法应将表单实例设置为该参数,并应设置布尔标志isEdit=true
将加载数据/填充控件(如组合框)的所有代码放入表单加载事件中
在加载事件的底部,在填充控件后执行以下操作:
if (isEdit)
{
//Set your controls selected values from the object you are editing
}
现在,对于新对象,只需制作表单并在其上调用Show或ShowDialog即可。这将导致Load事件触发,并填充控件
要进行编辑,请创建表单,调用Initialize,然后执行Show/ShowDialog。由于Initialize方法将isEdit设置为true,加载事件底部的if(isEdit)代码块将被命中,控件值将被设置为与正在编辑的对象的属性相等
下面是一些非常简单的示例代码:
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//This is simulating an add...First Language will be displayed on form2,
//which is English
Form2 form = new Form2();
form.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
//This is simulating an edit...this will display french
//(or whatever is passed in)
Form2 form = new Form2();
form.Initialize(Languages.French);
form.ShowDialog();
}
声明要在表单中添加/编辑的对象类型的实例
向表单中添加bool isEdit并将其设置为false
添加方法public void Initialize(ObjectType name)
Initialize方法应将表单实例设置为该参数,并应设置布尔标志isEdit=true
将加载数据/填充控件(如组合框)的所有代码放入表单加载事件中
在加载事件的底部,在填充控件后执行以下操作:
if (isEdit)
{
//Set your controls selected values from the object you are editing
}
现在,对于新对象,只需制作表单并在其上调用Show或ShowDialog即可。这将导致Load事件触发,并填充控件
要进行编辑,请创建表单,调用Initialize,然后执行Show/ShowDialog。由于Initialize方法将isEdit设置为true,加载事件底部的if(isEdit)代码块将被命中,控件值将被设置为与正在编辑的对象的属性相等
下面是一些非常简单的示例代码:
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//This is simulating an add...First Language will be displayed on form2,
//which is English
Form2 form = new Form2();
form.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
//This is simulating an edit...this will display french
//(or whatever is passed in)
Form2 form = new Form2();
form.Initialize(Languages.French);
form.ShowDialog();
}
声明要添加/编辑的对象类型的实例