C#将数组列表值从一个表单添加到另一个表单的组合框中

时间:2011-06-13 22:34:53

标签: c# forms combobox

我想从单独的表单中获取数组列表的值,并将它们添加到另一个表单上的组合框中。我在form2中试过这个。

foreach (string fname in newname)
{
    form1.comboBox1.Items.Add(fname);
}

但它不会将值发送到组合框。现在,如果我在form1上添加它

base.AddOwnedForm(form2)

,这在form2上

Form1 form1=(Form1)this.Owner

它可以工作但是form1会隐藏自己,当你点击“X”按钮时也不会关闭。 (这似乎是form2的继承属性)。

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:1)

我不确定这是否是您需要的。我希望它是:)。我正在学习C#+ winforms,所以我把你的问题当作练习。

我创建了两个简单的表单(所有控件默认命名)

Simple forms

第一个表单代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 newForm = new Form2(this);
        newForm.Show();
    }

    public void UpdateCombo(List<String> newName)
    {
        comboBox1.Items.Clear();
        foreach (string fname in newName)
        {
            comboBox1.Items.Add(fname);
        }
        comboBox1.SelectedIndex = 0;
    }
}

第二个表单代码:

public partial class Form2 : Form
{
    List<String> newName;
    Form1 parent;

    public Form2(Form1 parentIn)
    {
        parent = parentIn;
        InitializeComponent();
    }

    void UpdateList()
    {
        newName = new List<String>();
        for (int i = 1; i <= numericUpDown1.Value; i++)
        {
            if (i == 1)
                newName.Add("1 duck");
            else
                newName.Add(i.ToString() + " ducks");
        }
    }

    private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        UpdateList();
        parent.UpdateCombo(newName);
    }
}

我希望代码是自我解释的,如果不随意问。如果比我更有经验的人会检查并批准它,那也会更好。

答案 1 :(得分:0)

从父母到孩子发送东西时非常容易。当你向另一个方向前进时,你通常最好设置“事件处理”,允许值“被传回”。

我不确定这是“最佳”教程,但它涵盖了使用委托在表单之间传递信息的“事件处理”:http://www.codeproject.com/KB/cs/PassDataWinForms.aspx。我认为,当你自己编写代码时,开始理解事件处理是如何工作的,而不是依赖双击设计器优点中的表单元素,这将是一个好的地方。