将form1中的列表数据发送到form2

时间:2014-01-03 21:52:19

标签: c# forms

我想在form1的列表中找到一个项目,并将其作为要读取的变量值发送到新的form2。 我怎么能这样做? 即。

 List<SpecialClass> someList = new List<SpecialClass>();

//Use a button to Add some items.... such as 1,2,3
SpecialClass object = new SpecialClass();

object.propertyA = 1;
object.propertyB = 2;
object.propertyC = 3;

//Add some values by class property
 someList.Items.Add(object.propertyA);
 someList.Items.Add(object.propertyB); 
 someList.Items.Add(object.propertyC); 


someList.IndexOf(2) //get .propertyC by index

MessageBox("{0}", someList.IndexOf(2)) //writes propertyC in the index

//Somehow I would like to be able to use the list in form1 in form2 and find a property that exists or indexed. i.e.
pseudocode example of the method in form2:
int num = 5;
int product;
product = num * (object.propertyC's value);

如何编写这个,以便form2使用变量读取form1索引中的项? 如果您考虑使用更好的方法来访问该属性而不是索引编号3,请告诉我。

1 个答案:

答案 0 :(得分:0)

通常有两种方式......

  • Form1中的值是> ,而Form2的生命期内没有变化吗?

如果是这种情况,则将其包含在Form2的构造函数中。像这样:

private SpecialClass ValueFromForm1 { get; set; }

public Form2(SpecialClass valueFromForm1)
{
    ValueFromForm1 = valueFromForm1;
}

如果需要该值,您还可以在其中添加一些null检查和有用的错误消息。您还可以显式删除默认构造函数,以便Form2需要这样的值才能创建:

private Form2() { }

这样,当您创建Form2的实例时,需要将值传递给它:

var form2Instance = new Form2(theValue);

Form2的任何位置,您都会将其引用为this.ValueFromForm1

您甚至可以在Form2上将其设为公共财产,并将其设置为Form1,如下所示:

窗体2:

public SpecialClass ValueFromForm1 { get; set; }

Form1中:

var form2Instance = new Form2();
form2Instance.ValueFromForm1 = someValue;
form2Instance.Show();

但是这样做的缺点是并非真正要求该值,并且有责任手动记住将其设置为消耗代码,而责任并不属于该责任。 Form2应该要求它具有任何价值。


  • 该值是否在Form2的生命周期内发生变化,是否需要在后台从Form1重新获取?

Form1上创建公共属性,并将Form1的引用传递给Form2。所以在Form1你可能有这个:

public SpecialClass ValueFromForm1 { get; private set; }

当你拥有它时,你会在Form1上设置该值。然后在Form2中修改构造函数,如上所述,但这次接受Form1的实例:

private Form1 Form1Instance { get; set; }

public Form2(Form1 form1Instance)
{
    Form1Instance = form1Instance;
}

然后Form2中的任何位置都可以将值引用为:

this.Form1Instance.ValueFromForm1;

它们是形式的事实并没有改变它们是面向对象世界中的对象的基本事实。只需从一个属性中公开一个属性即可从另一个属性中读取该值。