当两个窗体都处于活动状态时,从其他 Winform 中填充一个 Winform 的列表 <String>
Fill a List<String> of a Winform from other Winform while both forms are active
我正在尝试在两个表单都打开时从另一个表单填写 List<String>
。
在表格 WorkOrder
中我有一个列表:List<String> materialsList
,然后在我的其他表格 AddMaterials
中我有其他 List<String> list
,这是我想要的列表传递给 WorkOrder
表格,但两种表格都是开放的,我不知道是否可以这样做。
这是我的表格:
如果我单击 WorkOrder
表单中的添加 Materials 按钮,则会打开表单 AddMaterials
。现在打开表单 AddMaterials
,我使用添加新 Material 按钮一个接一个地填充列表的元素,然后当我单击完成时,我想将 List<String> list
传递给 WorkOrder
列表:List<String> materialsList
.
这是我试图解决这个问题的代码:
WorkOrder
形式:
List<String> materialsList = new List<string>();
public void setList(List<String> l)
{
this.materialsList = l;
}
在AddMaterials
形式中:
public partial class AddMaterials : Form
{
List<String> list = new List<string>();
public AddMaterials()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//Adding Materials
list.Add(material.Text);
}
private void button2_Click(object sender, EventArgs e)
{
//Passing the list with Method setList()
WorkOrder o = new WorkOrder();
o.setList(list);
}
}
有任何问题post评论。
您可以在 AddMaterials 表单的构造函数中传递对 WorkOrder 表单或 WorkOrder.materialsList 的引用。
所以您的 AddMaterials 代码可以是
public partial class AddMaterials : Form
{
WorkOrder wo;
public AddMaterials(WorkOrder wo)
{
InitializeComponent();
this.wo = wo;
}
private void button1_Click(object sender, EventArgs e)
{
//Adding Materials
this.wo.materialsList.Add(material.Text);
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
在 WorkOrder 中,您可以使用此功能打开一个新的 AddMaterials 表单。在创建新的 AddMaterials Form 之前,您可以在此处放置逻辑以清除列表,或者如果您有一个 WorkOrder 的多个材料列表,则执行其他操作。
private void button1_Click(object sender, EventArgs e)
{
// Add logic here to deal with multiple AddMaterial Forms
// on one work order
new AddMaterials(this).Show();
}
您正在做的事情不起作用,因为您使用的是两个完全不同的列表。
您可以为 AddMaterials 创建自定义构造函数:
public AddMaterials(List<string> materials)
{
InitializeComponent();
this.materials = materials;
}
并将材料声明为 AssMaterials 的成员 class:
private List<string> materials;
如果你想让事情更加分离,你可以传递一个委托:
public delegate void Del(string str);
class AddMaterials
{
private Del addMaterialDelegate;
public AddMaterials(Del AddMaterialDelegate) : Form
{
InitializeComponent();
this.addMaterialDelegate = AddMaterialDelegate;
}
private void button1_Click(object sender, EventArgs e)
{
//Adding Materials
addMaterialDelegate(material.Text);
}
}
然后从工单:
private void button1_Click(object sender, EventArgs e)
{
new AddMaterials(OnAddMaterialDelegate).Show();
}
private void OnAddMaterialDelegate(string material)
{
this.materialsList.Add(material);
}
这将允许您在将来改变主意而无需太多返工(例如,如果您想从列表切换到不同的类型)。
我正在尝试在两个表单都打开时从另一个表单填写 List<String>
。
在表格 WorkOrder
中我有一个列表:List<String> materialsList
,然后在我的其他表格 AddMaterials
中我有其他 List<String> list
,这是我想要的列表传递给 WorkOrder
表格,但两种表格都是开放的,我不知道是否可以这样做。
这是我的表格:
如果我单击 WorkOrder
表单中的添加 Materials 按钮,则会打开表单 AddMaterials
。现在打开表单 AddMaterials
,我使用添加新 Material 按钮一个接一个地填充列表的元素,然后当我单击完成时,我想将 List<String> list
传递给 WorkOrder
列表:List<String> materialsList
.
这是我试图解决这个问题的代码:
WorkOrder
形式:
List<String> materialsList = new List<string>();
public void setList(List<String> l)
{
this.materialsList = l;
}
在AddMaterials
形式中:
public partial class AddMaterials : Form
{
List<String> list = new List<string>();
public AddMaterials()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//Adding Materials
list.Add(material.Text);
}
private void button2_Click(object sender, EventArgs e)
{
//Passing the list with Method setList()
WorkOrder o = new WorkOrder();
o.setList(list);
}
}
有任何问题post评论。
您可以在 AddMaterials 表单的构造函数中传递对 WorkOrder 表单或 WorkOrder.materialsList 的引用。 所以您的 AddMaterials 代码可以是
public partial class AddMaterials : Form
{
WorkOrder wo;
public AddMaterials(WorkOrder wo)
{
InitializeComponent();
this.wo = wo;
}
private void button1_Click(object sender, EventArgs e)
{
//Adding Materials
this.wo.materialsList.Add(material.Text);
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
在 WorkOrder 中,您可以使用此功能打开一个新的 AddMaterials 表单。在创建新的 AddMaterials Form 之前,您可以在此处放置逻辑以清除列表,或者如果您有一个 WorkOrder 的多个材料列表,则执行其他操作。
private void button1_Click(object sender, EventArgs e)
{
// Add logic here to deal with multiple AddMaterial Forms
// on one work order
new AddMaterials(this).Show();
}
您正在做的事情不起作用,因为您使用的是两个完全不同的列表。 您可以为 AddMaterials 创建自定义构造函数:
public AddMaterials(List<string> materials)
{
InitializeComponent();
this.materials = materials;
}
并将材料声明为 AssMaterials 的成员 class:
private List<string> materials;
如果你想让事情更加分离,你可以传递一个委托:
public delegate void Del(string str);
class AddMaterials
{
private Del addMaterialDelegate;
public AddMaterials(Del AddMaterialDelegate) : Form
{
InitializeComponent();
this.addMaterialDelegate = AddMaterialDelegate;
}
private void button1_Click(object sender, EventArgs e)
{
//Adding Materials
addMaterialDelegate(material.Text);
}
}
然后从工单:
private void button1_Click(object sender, EventArgs e)
{
new AddMaterials(OnAddMaterialDelegate).Show();
}
private void OnAddMaterialDelegate(string material)
{
this.materialsList.Add(material);
}
这将允许您在将来改变主意而无需太多返工(例如,如果您想从列表切换到不同的类型)。