C# - 从一个类访问另一个类的对象列表

时间:2014-10-16 06:46:05

标签: c# .net

我遇到这个非常奇怪的问题,我在一个类中创建了一些对象的列表,然后尝试在另一个类中访问它,但是在其他类中它是空的:

我填写列表的第一堂课:

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!
            //*******************
        }

    }
}

我甚至尝试在头等舱公开一切,但不管我做什么,我总是在第二堂课中获得空名单。

2 个答案:

答案 0 :(得分:1)

Form1Ribbon1之间没有任何关系,那么如何才能访问另一个的实例呢?

有了这个:

        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>();