我遇到这个非常奇怪的问题,我在一个类中创建了一些对象的列表,然后尝试在另一个类中访问它,但是在其他类中它是空的:
我填写列表的第一堂课:
namespace dragdrop
{
struct BR
{
private string var;
public string Var
{
get { return var; }
set { var = value; }
}
private string equalsTo;
public string EqualsTo
{
get { return equalsTo; }
set { equalsTo = value; }
}
private string output;
public string Output
{
get { return output; }
set { output = value; }
}
private string els;
public string Els
{
get { return els; }
set { els = value; }
}
private string elsOutput;
public string ElsOutput
{
get { return elsOutput; }
set { elsOutput = value; }
}
}
public partial class Form1 : Form
{
//******************
private List<BR> list = new List<BR>(); //This is the list!
//******************
internal List<BR> List
{
get { return list; }
set { list = value; }
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] vars = new string[] { "Name", "Gender", "Age", "Address", "email" };
comboBox1.DataSource = vars;
}
private void button1_Click(object sender, EventArgs e)
{
BR b = new BR();
b.Var = comboBox1.SelectedItem.ToString();
b.EqualsTo = textBox1.Text;
b.Output = textBox2.Text;
list.Add(b);
//*****************
textBox1.Text = List.Count.ToString(); //This gives the correct count value!
//*****************
//this.Close();
}
}
}
我在第二类访问它,如:
namespace dragdrop
{
public partial class Ribbon1
{
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
Form1 form = new Form1();
List<BR> l = form.List; ;
//*******************
MessageBox.Show(form.List.Count.ToString()); //This strangely gives count 0!
//*******************
}
}
}
我甚至尝试在头等舱公开一切,但不管我做什么,我总是在第二堂课中获得空名单。
答案 0 :(得分:1)
Form1
和Ribbon1
之间没有任何关系,那么如何才能访问另一个的实例呢?
有了这个:
Form1 form = new Form1(); // new instance of Form1
List<BR> l = form.List; ; // of course the list is empty in a new instance!
您永远无法访问其他Form1
实例的值。
由于我不知道你的课程是如何连接的,所以我不能给你更多的建议而不是看看this good overview of OO-relationships.你必须以某种方式连接它们以便它起作用,我非常推荐组合//聚合(同样的事情,不同的学校)。
答案 1 :(得分:-1)
我需要做的就是让列表成为第一类中的静态成员,这解决了当我尝试在Ribbon1类中创建Form1的新实例时具有不同值的问题。
private static List<BR> list = new List<BR>();