C#将列表框的内容从一个表单转移到另一个表单

C#将列表框的内容从一个表单转移到另一个表单,c#,forms,listbox,C#,Forms,Listbox,我目前正在尝试将表格1上的列表框中的信息发送到表格2 列表框是通过使用按钮填充的,这些按钮在表格1的列表框中添加一个条目。我希望系统通过将表格1的列表框中的项目转移到表格2中的列表框,在我的应用程序中的表格之间转移这些项目。然后,表单2可以通过按钮以相同的方式将项目添加到其列表框中,并将列表框中的更新信息发送回 我的想法是,在从表格1更改为表格2之前,我需要将信息记录在列表框中,然后一旦表格2打开,从表格1保存的信息就会添加到表格2中的列表框中。然而,说我是新的编码是一种轻描淡写,所以我不知道如

我目前正在尝试将表格1上的列表框中的信息发送到表格2

列表框是通过使用按钮填充的,这些按钮在表格1的列表框中添加一个条目。我希望系统通过将表格1的列表框中的项目转移到表格2中的列表框,在我的应用程序中的表格之间转移这些项目。然后,表单2可以通过按钮以相同的方式将项目添加到其列表框中,并将列表框中的更新信息发送回

我的想法是,在从表格1更改为表格2之前,我需要将信息记录在列表框中,然后一旦表格2打开,从表格1保存的信息就会添加到表格2中的列表框中。然而,说我是新的编码是一种轻描淡写,所以我不知道如何做到这一点。非常感谢您提供的任何帮助。 当做
Tom Smith

您只需传递列表框,然后将数据源设置为相等。你可以在承包商里这样做

来自表格1

Form2 form = new Form2(listBox1);
来自表格2

public Form2(listbox box)
{
    InitializeComponent();
    listbox1.datasource = box.datasource;
}
public void setListBoxDataSource(listBox1 box)
{
    listbox1.datasource = box.datasource;
}
只需确保首先调用initializeComponent(),否则会出现错误,因为listbox1还不存在

如果已经创建了Form2,请在Form2中创建一个方法以从form1设置它

form.setListBoxDataSource(listBox1); //form = an instance of form2
来自表格1

form.setListBoxDataSource(listBox1); //form = an instance of form2
来自表格2

public Form2(listbox box)
{
    InitializeComponent();
    listbox1.datasource = box.datasource;
}
public void setListBoxDataSource(listBox1 box)
{
    listbox1.datasource = box.datasource;
}

需要注意的是,要使其工作,您需要将项目从数据源(如列表)添加到第一个列表框中。如果您使用的是listBox1.Item.Add(“某物”),则必须遍历listbox项,将它们添加到列表中,传递列表并将列表设置为列表2的数据源。正如你所说。

有两个概念可以帮助编写更好的软件

首先,最好在表单之外维护数据。Net程序员在VisualStudio的领导下以表单形式保存数据。然而,这并不是使用数据库来完成的,比如在使用实体框架时。不使用数据库时,最好将数据分开

另一点是,最好创建一个对象,将数据与控件分开维护,并将控件绑定到该数据源

要创建此示例,只需创建一个表单应用程序并添加第二个表单

我不确定相对于Form1,您将如何显示Form2,但出于我的示例目的,我将以以下方式在Form1之后显示Form2(从Main):

Application.Run(new Form1());
Application.Run(new Form2());
在Program类中添加以下内容:

static public BindingList<String> Items = new BindingList<String>();
Program.Items.Add("1 "+DateTime.Now.ToString("mm:ss.ff"));
我假设,由于您希望将Form2的数据添加到Form1的数据之后,因此实际上可以只使用一个列表。如果您需要两个列表,那么很容易创建两个

然后在表单的构造函数中添加(在InitializeComponent之后):

我不确定“使用按钮填充列表框”是什么意思,但我假设您没有解释,因为这与此无关。对于我的示例,我使用DateTime生成数据。因此,在按钮的单击事件中,执行“Program.Items.Add”,如下所示:

static public BindingList<String> Items = new BindingList<String>();
Program.Items.Add("1 "+DateTime.Now.ToString("mm:ss.ff"));
这将向项目中添加一个项目。当然,数据是应用程序需要的任何数据。新添加的内容将显示在列表框中。我有“1”,因为对于表格2,我使用“2”。否则,表单的代码与我的示例相同

我希望这能充分描述代码。如果这不清楚,我可以发布更多