C#将列表框的内容从一种形式传送到另一种形式

时间:2016-04-12 15:43:35

标签: c# forms listbox

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

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

我的想法是我需要在从表单1更改为表单2之前在列表框中记录信息,然后一旦表单2打开,表单1中保存的信息将被添加到表单2中的列表框中。然而,说新的编码是轻描淡写,所以我不知道如何做到这一点。您可以提供的任何帮助表示赞赏。 问候, 汤姆史密斯

2 个答案:

答案 0 :(得分:0)

您可以只传递列表框,然后将数据源设置为相等。您可以在这样的构造函数中执行此操作

来自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("某些"),则必须遍历列表框项,将它们添加到列表中,传递列表并将列表设置为列表2的数据源。就像你说的那样。

答案 1 :(得分:0)

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

首先,在表单之外维护数据通常更好。 .Net程序员由Visual Studio负责将数据保存在表单中。但是,这不是使用数据库,例如使用实体框架时。不使用数据库时,最好还是将数据分开。

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

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

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

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

在Program类中添加以下内容:

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

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

using System.ComponentModel;

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

然后在表单的构造函数add(在InitializeComponent之后):

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

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

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

这会将项目添加到项目中。数据当然是您的应用程序需要的任何数据。新添加将显示在ListBox中。我有“1”因为Form2我使用“2”。否则,Form的代码与我的样本相同。

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