为什么我无法退回我的方法?

时间:2015-09-21 10:21:07

标签: c# forms methods combobox enums

我有一个包含一些语言的枚举,如英语,法语,西班牙语,德语......

我有以下方法返回一个comumBox实例,其枚举为DataSource:

  public ComboBox UpdateComboBoxIdioma()
        {
            comboIdioma.DataSource = Enum.GetValues(typeof(Idioms)); 
            return comboIdioma;//it return 6 languages
        }

我将方法的结果comboBox分配给表单中的comboBox,以显示我的语言:

comboBox2 = classeDefinicoes.UpdateComboBoxIdioma();

但它没有显示表格上的语言。

可能是什么问题?

2 个答案:

答案 0 :(得分:2)

在我看来,从方法中返回一个组合控件并不是一个好主意。相反,您只需从Idioms枚举中获取值并将其设置为组合的DataSource,就像这样 -

var comboSource = Enum.GetValues(typeof(Idioms));
this.comboBox2.DataSource = comboSource;

或者像这样,如果您更喜欢一个衬垫:)

this.comboBox2.DataSource = Enum.GetValues(typeof(Idioms));

答案 1 :(得分:0)

假设您有FormSettingsClass

我试图重现你想说的话。我已向ComboBox添加了ButtonForm。在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();
}