我想在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,请告诉我。
答案 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;
它们是形式的事实并没有改变它们是面向对象世界中的对象的基本事实。只需从一个属性中公开一个属性即可从另一个属性中读取该值。