C# 填写一份清单<;字符串>;当两个窗体都处于活动状态时,从另一个Winform中删除Winform
当两个表单都打开时,我试图从另一个表单填写C# 填写一份清单<;字符串>;当两个窗体都处于活动状态时,从另一个Winform中删除Winform,c#,forms,winforms,list,setter,C#,Forms,Winforms,List,Setter,当两个表单都打开时,我试图从另一个表单填写列表 在表格WorkOrder中,我有一个列表:list materialsList,然后在我的其他表格AddMaterials中,我有其他list list,这是我想传递给WorkOrder表格的列表,但两个表格都是打开的,我不知道有可能这样做 这是我的表格: 如果我在WorkOrder表单中单击添加材料按钮,则表单AddMaterials将打开。现在,当表单AddMaterials打开时,我用按钮addnewmaterial逐个填充列表中的元素,然
列表
在表格WorkOrder
中,我有一个列表:list materialsList
,然后在我的其他表格AddMaterials
中,我有其他list list
,这是我想传递给WorkOrder
表格的列表,但两个表格都是打开的,我不知道有可能这样做
这是我的表格:
如果我在WorkOrder
表单中单击添加材料按钮,则表单AddMaterials
将打开。现在,当表单AddMaterials
打开时,我用按钮addnewmaterial逐个填充列表中的元素,然后当我单击finish时,我想将列表列表
传递到工作订单
列表:列表材料列表
这是我试图解决的代码:
在WorkOrder
表格中:
List<String> materialsList = new List<string>();
public void setList(List<String> l)
{
this.materialsList = l;
}
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);
}
}
评论中的任何问题帖子。您可以在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表单之前,您可以在此处插入logic以清除该列表,或者如果您有一个工单的多个材质列表,则可以执行其他操作
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;
}
然后从WorkOrder:
private void button1_Click(object sender, EventArgs e)
{
new AddMaterials(OnAddMaterialDelegate).Show();
}
private void OnAddMaterialDelegate(string material)
{
this.materialsList.Add(material);
}
这将允许您在将来改变主意,而无需太多返工(例如,如果您想从列表切换到其他类型)
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);
}