我目前正在尝试将信息从表单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的代码与我的示例相同。
我希望这能充分描述代码。如果这不清楚,我可以发布更多。