我有一个Windows窗体,在单击按钮时执行此代码:
childForm frm = new childForm();
frm.ShowDialog();
frm.Close();
因此,当childForm打开时,我想从父类的ListBox控件中复制一些数据以显示并在childForm的ListBox中使用它。所以,理想情况下,我想以这样的方式引用父表单,但我尝试的每种方法都失败了。好像很容易。 childForm不是MdiForm。
答案 0 :(得分:2)
ListBox.Items
集合几乎可以容纳任何内容,因此我建议修改子表单以接受您填充ListBox
的任何类型的集合。这样,孩子就不必在集合中投射物品,你可以随心所欲地完成它们。
修改子表单以接受您要传递的数据:
public class childForm : Form
{
private IEnumerable<SomeClass> itemsFromParent;
public childForm(IEnumerable<SomeClass> itemsFromParent)
{
...
...
this.itemsFromParent = itemsFromParent;
}
}
然后将集合传递给孩子:
using (var frm = new childForm(yourListBox.Items.Cast<SomeClass>()))
{
frm.ShowDialog();
}
答案 1 :(得分:0)
您需要将父表单(this
)作为参数传递给子表单的构造函数。
答案 2 :(得分:0)
在ListBox
构造函数中发送ChildForm
控件数据。或者您可以发送父表单的实例。
childForm frm = new childForm(ListBox lb);
frm.ShowDialog();
frm.Close();
<强> ChildForm 强>:
public partial class childForm: Form
{
public childForm(ListBox parentlb)
{
InitializeComponent();
//use parentlb, traverse through items
//or assign items to private member of this class
}
}
答案 3 :(得分:0)
Grant Winney 已经提出了一个很好的解决方案,您可以将集合或列表直接传递到您的子表单构造函数中。另一种方法是您可以在子格式中创建属性并从子窗体外部访问它。
通过以子格式创建属性,您可以在表单关闭后从子表单中取回项目。
public class childForm : Form
{
public List<string> Items { get; set; }
private void childForm_Load(object sender, EventArgs e)
{
lstMyListBox.DataSource = Items;
}
}
现在,您可以将列表框(父窗体)的选定项目分配给子窗体,如下所示
List<stirng> lstItems = new List<stirng>();
foreach (var item in listBox1.SelectedItems)
{
lstItems.Add(item.ToString());
}
childForm frm = new childForm();
frm.Items = lstItems;
frm.ShowDialog();
frm.Close();