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

时间:2017-06-27 11:24:58

标签: c# winforms

我有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,我想传递给Form1:

public partial class Form2 : Form
    {

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

        Form1 formMedici = new Form1(listaPacienti);

        public Form2()
        {
            InitializeComponent();
            listaPacienti.Add(p1);
            listaPacienti.Add(p2);
        }

之所以错,是因为我之前在这里搜索了这是怎么建议的,如果我写错了我不知道它是什么,因为在Form2中,参数& #34; listaPacienti&#34;从以下一行

Form1 formMedici = new Form1(listaPacienti);

向我显示了这条消息:&#34;字段初始化程序无法引用非静态字段,方法或属性&#34; Form2.listaPacienti&#34;。

谢谢

4 个答案:

答案 0 :(得分:4)

实际上这里有几个问题。错误本身告诉您,当初始化类成员时,您无法使用类成员。您正在尝试使用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构造函数还需要接受该参数。因此,您需要修改现有的Form1构造函数或添加新的构造函数:

public Form1(List<Pacient> listaPacienti)
{
    InitializeComponent();
    // do something with listaPacienti?
}

然而,为什么你甚至不这样做也不太清楚。您在Form2中创建Form1的实例:

Form2 formPacienti = new Form2();

然后Form1中创建Form2的实例:

Form1 formMedici = new Form1(listaPacienti);

这是一个等待发生的无限递归。您真的希望Form2创建Form1实例吗?或者您想使用Form1现有实例?如果是后者,则完全从Form1删除对Form2的引用。

有多种方法可以实现您尝试做的总体目标,哪一种理想取决于比此处提供的更多。但是,给出信息的最简单方法可能只是从listaPacienti之外访问Form2

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是一个公共属性,任何引用Form2实例的代码都可以访问该属性:

Form2 formPacienti = new Form2();
// Do other things with formPacienti?
// Either way, here you can access formPacienti.ListaPacienti

答案 1 :(得分:0)

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

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

    }

之后,您可以随时使用此代码。

Form1 formMedici = new Form1(listaPacienti);

答案 2 :(得分:0)

Form1listaPacienti的实例化移动到构造函数中。现有的答案可以很好地描述您收到此错误的原因 - A field initializer cannot reference the nonstatic field, method, or property

public partial class Form2 : Form
    {

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

        Form1 formMedici;

        public Form2()
        {
            listaPacienti=new List<Pacient>();
            formMedici = new Form1(listaPacienti);

            InitializeComponent();
            listaPacienti.Add(p1);
            listaPacienti.Add(p2);
        }
}

答案 3 :(得分:0)

您可以执行以下操作

发件人表单:

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;
    }
}