C#将列表框的内容从一个表单传输到另一个表单



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

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

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

您只需传递列表框,然后将数据源设置为相等。你可以在像这样的构造器中完成

来自form1

Form2 form = new Form2(listBox1);

来自form2

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

只需确保先调用initializeComponent(),否则会出现错误,因为listbox1还不存在。

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

来自form1

form.setListBoxDataSource(listBox1); //form = an instance of form2

来自form2

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

需要注意的是,要做到这一点,您需要将数据源(如列表)中的项添加到第一个列表框中。如果您使用的是listBox1.Item.Add("something"),则必须遍历listbox项,将它们添加到列表中,传递列表并将该列表设置为列表2的数据源。就像你说的。

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

首先,通常最好在表单之外维护数据。在Visual Studio的领导下,网络程序员将数据保存在表单中。然而,这并不是使用数据库来完成的,例如在使用实体框架时。当不使用数据库时,最好将我们的数据分开。

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

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

我不确定你将如何显示Form2相对于Form1,但就我的样本而言,我将以以下方式在Form1之后显示Form2(来自Main):

Application.Run(new Form1());
Application.Run(new Form2());

在Program类中添加以下内容:

static public BindingList<String> Items = new BindingList<String>();

这将创建一个字符串列表。请注意,我正在使它成为一个静态的,但还有其他的可能性,我不知道你的相关要求是什么。若要使用BindingList,您需要以下"using";

using System.ComponentModel;

我假设,由于您希望在Form1的数据之后添加Form2的数据,因此实际上您只能使用一个列表。如果您需要两个列表,那么创建两个列表就足够容易了。

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

BindingSource bs = new BindingSource();
listBox1.DataSource = Program.Items;

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

Program.Items.Add("1 "+DateTime.Now.ToString("mm:ss.ff"));

这将向项目中添加一个项目。数据当然是应用程序所需的任何数据。新添加的内容将显示在ListBox中。我在那里有"1",因为对于Form2,我使用"2"。否则,Form的代码与我的示例相同。

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

相关内容

最新更新