C# 尝试使用自定义事件对主窗体中的两个不同子窗体进行更改

C# 尝试使用自定义事件对主窗体中的两个不同子窗体进行更改,c#,forms,winforms,windows-applications,C#,Forms,Winforms,Windows Applications,我有一份有三张表格的申请表 我希望能够在以单独的形式创建新对象时更新listview控件,同时显示这三个控件 MainForm-包含一个在其中实例化的列表集合,两个按钮用于实例化CarForm和ListViewCarForm public static List<Cars> listOfCars = new List<Cars>(); public List<Cars> CarList { get { return listOfCars; } s

我有一份有三张表格的申请表

我希望能够在以单独的形式创建新对象时更新listview控件,同时显示这三个控件

MainForm-包含一个在其中实例化的列表集合,两个按钮用于实例化CarForm和ListViewCarForm

public static List<Cars> listOfCars = new List<Cars>();

public List<Cars> CarList
{
   get { return listOfCars; }
   set { listOfCars = value; }
}

private void displayListViewToolStripMenuItem_Click(object sender, EventArgs e)
{
   ListViewCarForm lvcf = new ListViewCarForm();
   lvcf.Show();
}

private void newCarFormButton_Click(object sender, EventArgs e)
{
   CarForm cf = new CarForm();
   cf.Show();

   //Adds new item created to listOfItems 
   cf.ObjectCreatedToList += ObjectCreatedToListCollectionHandler;
}
ListViewForm-包含一个ListView,当项目被添加到CarForm中的列表集合中时,它也应该被添加到ListView控件中

我遇到的问题是,当所有三个表单都打开时,ListViewForm中的listview控件应该随着CarForm创建新对象并添加到MainForm中的列表集合中而更新

由于这两个表单是在MainForm中的一个不同按钮中实例化的,因此我似乎不知道如何在listview控件中添加项,而不会影响该方法或给我一个错误


*这是我第一次使用Windows应用程序窗体

为了保持简单,一种解决方案是将所需的变量传递给子窗体。示例:假设主窗体包含项目的
列表框和打开
控件窗体的按钮,那么,当用户单击“打开控件窗体”按钮时,
控件窗体
打开,它有一个文本框和一个按钮。当用户在文本框中键入内容,然后单击“添加到父列表”按钮时,文本框中的文本应添加到父窗体的
列表框
项中。您可以将
列表框
列表
或任何需要的内容传递给子窗体。希望这是有意义的

main表单
有一个
列表框
和一个按钮。表单上的
列表框
名为
Form1ListBoxControl
。当用户单击“打开控件窗体”按钮时,变量
Form1ListBoxControl
将传递给新创建的
ControlsForm
,然后显示
ControlsForm
,如上所示

主窗体“打开控制窗体”按钮单击事件

private void btnOpenControlsForm_Click(object sender, EventArgs e) {
  ControlsForm controlsForm = new ControlsForm(Form1ListBoxControl);
  controlsForm.Show();
}
控制表单…

要在
ControlsForm
中使用传递的
Form1ListBoxControl
变量,我们需要创建一个全局
ListBox
变量,以便表单中的其他方法可以使用父类
ListBox

ListBox parentListBox;
private void btnAddToParentList_Click(object sender, EventArgs e) {
  parentListBox.Items.Add(textBox1.Text);
}
此外,我们需要为
ControlsForm
创建一个新的“构造函数”,以接受
ListBox
参数,并将此参数用作上面定义的全局变量

public ControlsForm(ListBox passedParentListBox) {
  InitializeComponent();
  parentListBox = passedParentListBox;
}
最后,单击
控件窗体中的按钮事件,将新项目添加到父级
列表框中

ListBox parentListBox;
private void btnAddToParentList_Click(object sender, EventArgs e) {
  parentListBox.Items.Add(textBox1.Text);
}

为了保持简单,一种解决方案是将所需的变量传递给子窗体。例如:假设主窗体包含一个项目的
列表框和一个打开
控件窗体的按钮,然后,当用户单击“打开控件窗体”时按钮,
控件窗体
打开,它有一个文本框和一个按钮。当用户在文本框中键入内容,然后单击“添加到父列表”时按钮,文本框中的文本应添加到父窗体的
列表框
项中。您可以将
列表框
列表
或任何需要的内容传递到子窗体。希望这有意义

main表单
有一个
ListBox
和一个按钮。表单上的
ListBox
名为
Form1ListBoxControl
。当用户单击“打开控件表单”时按钮,变量
Form1ListBoxControl
被传递给新创建的
ControlsForm
,然后显示
ControlsForm
,如上所示

主窗体“打开控制窗体”按钮单击事件

private void btnOpenControlsForm_Click(object sender, EventArgs e) {
  ControlsForm controlsForm = new ControlsForm(Form1ListBoxControl);
  controlsForm.Show();
}
控制表单…

要在
ControlsForm
中使用传递的
Form1ListBoxControl
变量,我们需要创建一个全局
ListBox
变量,以便表单中的其他方法可以使用父类
ListBox

ListBox parentListBox;
private void btnAddToParentList_Click(object sender, EventArgs e) {
  parentListBox.Items.Add(textBox1.Text);
}
此外,我们需要为
ControlsForm
创建一个新的“构造函数”,以接受
ListBox
参数,并将此参数用作上面定义的全局变量

public ControlsForm(ListBox passedParentListBox) {
  InitializeComponent();
  parentListBox = passedParentListBox;
}
最后,单击
控件窗体中的按钮事件,将新项目添加到父级
列表框中

ListBox parentListBox;
private void btnAddToParentList_Click(object sender, EventArgs e) {
  parentListBox.Items.Add(textBox1.Text);
}

你应该命名你的表单。它们是我的真实代码。看看“SecondForm”代码部分,你为什么要创建一个新的
Form1
?在该部分代码中创建的
Form1
永远不会显示(Show()。因此,在这种情况下,您似乎创建了新表单1,然后向其
CarList
添加了一些信息……但就是这样…。一旦您离开
enterCarToListToolStripButton\u单击
事件…在该事件中创建的
Form1
mainForm
将不再存在。我不需要显示mainForm,因为它已经显示了?我只需要实例化它来访问列表以添加新项。。。这是错误的做法吗?代码行:
Form1 mainForm=new Form1()。。。。创建新的
表单1
。您可能已经显示了另一个form1,不幸的是下面的代码行:
mainForm.CarList.Add(Info)
将引用您刚刚创建的
主表单
,正如我在上一篇评论中所述。。。退出这部分代码后。。。新创建的
main表单
将不再存在。您应该命名您的表单。它们在我的真实代码中。查看“SecondForm”代码部分,您为什么要创建新的
Form1
?在该部分代码中创建的
Form1
永远不会显示(Show()。因此,在这种情况下,您似乎创建了新的form1,然后添加了一些i