我有一个包含一些语言的枚举,如英语,法语,西班牙语,德语......
我有以下方法返回一个comumBox实例,其枚举为DataSource:
public ComboBox UpdateComboBoxIdioma()
{
comboIdioma.DataSource = Enum.GetValues(typeof(Idioms));
return comboIdioma;//it return 6 languages
}
我将方法的结果comboBox分配给表单中的comboBox,以显示我的语言:
comboBox2 = classeDefinicoes.UpdateComboBoxIdioma();
但它没有显示表格上的语言。
可能是什么问题?
答案 0 :(得分:2)
在我看来,从方法中返回一个组合控件并不是一个好主意。相反,您只需从Idioms
枚举中获取值并将其设置为组合的DataSource
,就像这样 -
var comboSource = Enum.GetValues(typeof(Idioms));
this.comboBox2.DataSource = comboSource;
或者像这样,如果您更喜欢一个衬垫:)
this.comboBox2.DataSource = Enum.GetValues(typeof(Idioms));
答案 1 :(得分:0)
假设您有Form
和SettingsClass
:
我试图重现你想说的话。我已向ComboBox
添加了Button
和Form
。在Button Click事件中,我设置了ComboBox
值。代码如下:
<强> Form1.cs中:强>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SettingsClass classeDefinicoes;
private void Form1_Load(object sender, EventArgs e)
{
classeDefinicoes = new SettingsClass();
}
private void button1_Click(object sender, EventArgs e)
{
comboBox2 = classeDefinicoes.UpdateComboBoxIdioma();
}
}
<强> SettingsClass.cs:强>
class SettingsClass
{
enum Idioms
{
English, French, Spanish, German
}
ComboBox comboIdioma;
public SettingsClass()
{
comboIdioma = new ComboBox();
}
public ComboBox UpdateComboBoxIdioma()
{
comboIdioma.DataSource = Enum.GetValues(typeof(Idioms));
return comboIdioma;//it return 6 languages
}
}
使用此代码,即使我在表单中的ComboBox
中也没有获得任何语言。当我按如下方式更改Button
点击事件时,我会收到ComboBox
中的项目。
更改了Button
点击事件:
private void button1_Click(object sender, EventArgs e)
{
comboBox2.DataSource = classeDefinicoes.UpdateComboBoxIdioma().DataSource;
}
更新:
您必须设置DataSource
属性才能获得更改。仅仅将返回的ComboBox
分配给表单中的ComboBox
不足以显示项目。
Yogi说的也是对的。如果你想按照他的说法去做,那么代码会变成这样:
<强> SettingsClass.cs:强>:
class SettingsClass
{
enum Idioms
{
English, French, Spanish, German
}
public Array UpdateComboBoxIdioma()
{
return Enum.GetValues(typeof(Idioms));
}
}
更改了Button
点击事件:
private void button1_Click(object sender, EventArgs e)
{
comboBox2.DataSource = classeDefinicoes.UpdateComboBoxIdioma();
}