C# 将表格1中的列表数据发送到表格2

C# 将表格1中的列表数据发送到表格2,c#,forms,C#,Forms,我想在form1中的列表中找到一项,并将其作为变量值发送到新的form2进行读取。 我该怎么做? i、 e List someList=newlist(); //使用按钮添加一些项目。。。。比如1,2,3 SpecialClass对象=新的SpecialClass(); object.propertyA=1; object.propertyB=2; object.propertyC=3; //按类属性添加一些值 someList.Items.Add(object.propertyA); some

我想在form1中的列表中找到一项,并将其作为变量值发送到新的form2进行读取。 我该怎么做? i、 e

List someList=newlist();
//使用按钮添加一些项目。。。。比如1,2,3
SpecialClass对象=新的SpecialClass();
object.propertyA=1;
object.propertyB=2;
object.propertyC=3;
//按类属性添加一些值
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))//在索引中写入propertyC
//不知何故,我希望能够在form2中使用form1中的列表,并找到一个存在或索引的属性。即
表2中方法的伪代码示例:
int num=5;
int产品;
product=num*(object.propertyC的值);
我该如何编写它,以便form2使用变量读取form1索引中的项?
如果您想用更好的方法访问属性而不是索引号3,请告诉我。

通常有两种方法

  • 值是否在
    表单1
    中设置一次,并且在
    表单2
    的生命周期内不会更改
如果是这种情况,则将其包含在
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
进行设置,如下所示:

private SpecialClass ValueFromForm1 { get; set; }

public Form2(SpecialClass valueFromForm1)
{
    ValueFromForm1 = valueFromForm1;
}
表格2:

public SpecialClass ValueFromForm1 { get; set; }
表格1:

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;
}
然后,在
表单2中的任意位置,您可以引用以下值:

this.Form1Instance.ValueFromForm1;

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

您不了解什么?您可以将列表发送到form2的构造函数中的form2,也可以发送到form2上的属性。谷歌搜索它,我相信你可以得到你想要的结果。我在form2中写下了我需要的属性,并在form1中特别调用了我需要的计算。该值不会更改,并且在form2属性的新上下文中将该值更改为零。我在form1中为它赋值,创建一个实例,并使用form2的属性设置它。var form2Instance=new form2(值);这个引用是在form1中使用新表单按钮还是在form2的代码中进行的?@CodeMatrix:我想您正在
form1
中创建
form2
实例,对吗?您在
Form1
中有值,因此当您创建
Form2
的实例时(就在
.Show()
之前),“private Form2(){}这样,当您创建Form2的实例时,您需要向它传递值:var form2Instance=new Form2(该值);在表单2中的任何地方都可以引用它。value from form1。”因此,第一行将“嫁接”到生成新表单的按钮中,然后被称为this。表单2中的值?@CodeMatrix:我不确定你的意思。(注释中的代码示例很难理解。)基本上,无论您在哪里创建要显示的
Form2
实例,都会将它所需的值传递到其构造函数中。然后在
Form2
中,您将该值保留在类级成员(例如属性或类级变量)中,并在需要
Form2
@CodeMatrix中的值时引用该成员:“替换列表”是什么意思?如果需要将类型设置为
列表
而不是
特殊类
,则只需将属性和构造函数参数设置为该类型即可。