将对象列表传递给另一个表单c#

将对象列表传递给另一个表单c#,c#,winforms,C#,Winforms,我有一个Form1,我想使用我在Form2中创建的对象列表listaPacienti,但它不起作用。 Pacient是用于生成对象的类 以下是Form1的开始: public partial class Form1 : Form { Form2 formPacienti = new Form2(); List<Pacient> listaPacienti = new List<Pacient>(); publi

我有一个Form1,我想使用我在Form2中创建的对象列表listaPacienti,但它不起作用。 Pacient是用于生成对象的类

以下是Form1的开始:

 public partial class Form1 : Form
    {

        Form2 formPacienti = new Form2();
        List<Pacient> listaPacienti = new List<Pacient>();

        public Form1()
        {
            InitializeComponent();

        }
显示以下消息:“字段初始值设定项无法引用非静态字段、方法或属性“Form2.listaPacienti”


谢谢

您需要再添加一个构造函数来形成这样一个构造函数

public Form1(List<Pacient> list)
    {
        this.listaPacienti=list;
        InitializeComponent();

    }

您需要再添加一个构造函数来形成这样的构造函数

public Form1(List<Pacient> list)
    {
        this.listaPacienti=list;
        InitializeComponent();

    }

实际上,这里有几件事是错误的。错误本身告诉您在初始化类成员时不能使用类成员。您试图使用
listaPacienti
初始化
formMedici
。但是您可以在构造函数中初始化它。类似这样:

List<Pacient> listaPacienti = new List<Pacient>();
Pacient p1 = new Pacient(0, "Pacient1", 0, 200);
Pacient p2 = new Pacient(1, "Pacienct2", 0, 100);

Form1 formMedici;

public Form2()
{
    InitializeComponent();
    listaPacienti.Add(p1);
    listaPacienti.Add(p2);
    formMedici = new Form1(listaPacienti);
}
但是,您甚至不清楚为什么要这样做。您在
Form1
中创建了
Form2
的实例:

Form2 formPacienti = new Form2();
然后在
Form2
中创建
Form1
的实例:

Form1 formMedici = new Form1(listaPacienti);
public List<Pacient> ListaPacienti { get; set; }
Pacient p1 = new Pacient(0, "Pacient1", 0, 200);
Pacient p2 = new Pacient(1, "Pacienct2", 0, 100);

public Form2()
{
    InitializeComponent();
    ListaPacienti = new List<Pacient>()
    ListaPacienti.Add(p1);
    ListaPacienti.Add(p2);
}
这是一个等待发生的无限递归。您真的希望
Form2
创建
Form1
的新实例吗?还是希望使用
Form1
的现有实例?如果是后者,则将对
Form1
的引用完全从
Form2
中删除

有多种方法可以实现您试图实现的总体目标,而哪种方法更理想取决于本文所介绍的内容。但是,考虑到所提供的信息,最简单的方法可能是从
Form2
外部访问
listaPacienti

Form1 formMedici = new Form1(listaPacienti);
public List<Pacient> ListaPacienti { get; set; }
Pacient p1 = new Pacient(0, "Pacient1", 0, 200);
Pacient p2 = new Pacient(1, "Pacienct2", 0, 100);

public Form2()
{
    InitializeComponent();
    ListaPacienti = new List<Pacient>()
    ListaPacienti.Add(p1);
    ListaPacienti.Add(p2);
}

实际上,这里有几件事是错误的。错误本身告诉您在初始化类成员时不能使用类成员。您试图使用
listaPacienti
初始化
formMedici
。但是您可以在构造函数中初始化它。类似这样:

List<Pacient> listaPacienti = new List<Pacient>();
Pacient p1 = new Pacient(0, "Pacient1", 0, 200);
Pacient p2 = new Pacient(1, "Pacienct2", 0, 100);

Form1 formMedici;

public Form2()
{
    InitializeComponent();
    listaPacienti.Add(p1);
    listaPacienti.Add(p2);
    formMedici = new Form1(listaPacienti);
}
但是,您甚至不清楚为什么要这样做。您在
Form1
中创建了
Form2
的实例:

Form2 formPacienti = new Form2();
然后在
Form2
中创建
Form1
的实例:

Form1 formMedici = new Form1(listaPacienti);
public List<Pacient> ListaPacienti { get; set; }
Pacient p1 = new Pacient(0, "Pacient1", 0, 200);
Pacient p2 = new Pacient(1, "Pacienct2", 0, 100);

public Form2()
{
    InitializeComponent();
    ListaPacienti = new List<Pacient>()
    ListaPacienti.Add(p1);
    ListaPacienti.Add(p2);
}
这是一个等待发生的无限递归。您真的希望
Form2
创建
Form1
的新实例吗?还是希望使用
Form1
的现有实例?如果是后者,则将对
Form1
的引用完全从
Form2
中删除

有多种方法可以实现您试图实现的总体目标,而哪种方法更理想取决于本文所介绍的内容。但是,考虑到所提供的信息,最简单的方法可能是从
Form2
外部访问
listaPacienti

Form1 formMedici = new Form1(listaPacienti);
public List<Pacient> ListaPacienti { get; set; }
Pacient p1 = new Pacient(0, "Pacient1", 0, 200);
Pacient p2 = new Pacient(1, "Pacienct2", 0, 100);

public Form2()
{
    InitializeComponent();
    ListaPacienti = new List<Pacient>()
    ListaPacienti.Add(p1);
    ListaPacienti.Add(p2);
}

Form1
listaPacienti
的实例化移动到构造函数中。此现有答案很好地描述了出现此错误的原因-

公共部分类表单2:表单
{
ListaPacienti;
Pacient p1=新Pacient(0,“Pacient 1”,0200);
Pacient p2=新Pacient(1,“Pacient2”,0,100);
Form1 formMedici;
公共表格2()
{
listaPacienti=新列表();
formMedici=新的Form1(listaPacienti);
初始化组件();
列表A系数添加(p1);
增加(p2);
}
}

Form1
listaPacienti
的实例化移动到构造函数中。现有答案很好地描述了出现此错误的原因-

公共部分类表单2:表单
{
ListaPacienti;
Pacient p1=新Pacient(0,“Pacient 1”,0200);
Pacient p2=新Pacient(1,“Pacient2”,0,100);
Form1 formMedici;
公共表格2()
{
listaPacienti=新列表();
formMedici=新的Form1(listaPacienti);
初始化组件();
列表A系数添加(p1);
增加(p2);
}
}

您可以执行以下操作

发件人表单:

private void btnIniciar_Click(object sender, EventArgs e)
    {
        this.Hide();
        Main newMain = new Main(this.lsProcesos);
        newMain.ShowDialog();
        this.Show();

    }
public partial class Main : Form
{
    List<Proceso> lsProcesos;
    public Main(object sender)
    {
        InitializeComponent();
        lsProcesos = (List<Proceso>)sender;
    }
}
接收人表格:

private void btnIniciar_Click(object sender, EventArgs e)
    {
        this.Hide();
        Main newMain = new Main(this.lsProcesos);
        newMain.ShowDialog();
        this.Show();

    }
public partial class Main : Form
{
    List<Proceso> lsProcesos;
    public Main(object sender)
    {
        InitializeComponent();
        lsProcesos = (List<Proceso>)sender;
    }
}
public分部类Main:Form
{
列出lsProcesos;
公用主(对象发送器)
{
初始化组件();
lsProcesos=(列表)发送方;
}
}

您可以执行以下操作

发件人表单:

private void btnIniciar_Click(object sender, EventArgs e)
    {
        this.Hide();
        Main newMain = new Main(this.lsProcesos);
        newMain.ShowDialog();
        this.Show();

    }
public partial class Main : Form
{
    List<Proceso> lsProcesos;
    public Main(object sender)
    {
        InitializeComponent();
        lsProcesos = (List<Proceso>)sender;
    }
}
接收人表格:

private void btnIniciar_Click(object sender, EventArgs e)
    {
        this.Hide();
        Main newMain = new Main(this.lsProcesos);
        newMain.ShowDialog();
        this.Show();

    }
public partial class Main : Form
{
    List<Proceso> lsProcesos;
    public Main(object sender)
    {
        InitializeComponent();
        lsProcesos = (List<Proceso>)sender;
    }
}
public分部类Main:Form
{
列出lsProcesos;
公用主(对象发送器)
{
初始化组件();
lsProcesos=(列表)发送方;
}
}

您需要使用正确的访问修改器。列出默认值。它们都不是
公共的
。此外,
Form1
没有定义接受
列表
作为参数的构造函数,因此即使您有权访问
listaPacienti
,这仍然是不正确的。您需要使用正确的访问权限modifiders.列出默认值。它们都不是
公共的
。此外,
Form1
没有定义接受
列表
作为参数的构造函数,因此即使您有权访问
listaPacienti
,这仍然是不正确的。