我有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;。
谢谢
答案 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)
将Form1
和listaPacienti
的实例化移动到构造函数中。现有的答案可以很好地描述您收到此错误的原因 - 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;
}
}