将对象列表传递给另一个表单c#
我有一个Form1,我想使用我在Form2中创建的对象列表listaPacienti,但它不起作用。 Pacient是用于生成对象的类 以下是Form1的开始:将对象列表传递给另一个表单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
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
,这仍然是不正确的。