2011-06-13 61 views
0

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

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

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

base.AddOwnedForm(form2) 

,这在窗口2

Form1 form1=(Form1)this.Owner 

它的工作原理,但Form1中会隐藏自身,并当你点击“X”按钮将不会关闭。 (这似乎是form2的继承属性)。

任何帮助将是伟大的!

+1

为什么你在foreach循环中使用newname [x]?不应该只是form1.comboBox1.Items.Add(fname);? – Grizzly 2011-06-13 22:38:34

+0

发布更多程序代码。具体来说,Show/ShowDialog。我怀疑当你改变为AddOwnedForm时,它不再是一个对话框。 – 2011-06-13 22:38:36

+0

对不起,它被origionaly设置为form1.comboBox1.Items.Add(fname);只是在玩它,并试图在阳光下的一切。 – user770344 2011-06-13 23:24:57

回答

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); 
    } 
} 

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

+0

太棒了,完全按照我需要的方式工作!谢谢! – user770344 2011-06-14 15:22:42

0

从父母到孩子发送内容非常简单。当你朝另一个方向前进时,你通常会更好地设置“事件处理”,允许“传回”值。

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

相关问题