将具有Class对象的表单从form2发送到form1

时间:2018-01-17 17:53:27

标签: c#

我想要做的是创建一个loginapplication,您可以在其中注册(用户名和密码),然后登录。 注册是在form2,我想在这里做的是输入用户名和密码,应该保存在我的个人列表中。我一直在试图弄清楚如何在form1中使用相同的列表,并且据我所知,该类必须是静态的,所以我可以在以后的所有表单中使用它?代码如下。

namespace windowssomething
{
public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public static class Holder 
    {
        public static List<Person> personlist = new List<Person>();

        public class Person
        {
            public string Name { get; set; }
            public string Pass { get; set; }

            public Person(string name = " ", string pass = " ") 
            {
                Name = name;
                Pass = pass;
            }

            public string Ts()
            {
                string s = "";
                s += Name;
                s += " ";
                s += Pass;

                return s;
            }

        }

    }

    private void Form2_Load(object sender, EventArgs e)
    {

    }

    private void reg_button_form2_Click(object sender, EventArgs e)
    {
        Holder.Person p1 = new Holder.Person();

        p1.Name = textBox1.Text;
        p1.Pass = textBox2.Text;

        Holder.personlist.Add(p1);

        this.Close();

        MessageBox.Show(p1.Ts());

    }

    private void button1_Click(object sender, EventArgs e)
    {
        Close();
    }
}}

我也读过这样的课,当静电时,它不能有吸气剂和固定器,这就是我卡住的地方。因此,如果我将类设为静态,则获取和设置将不起作用,有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

表单实际上只是UI。人和持有人的课程不是,所以他们不应该真的住在form2

PersonHolder课程移到他们自己的班级中,与form2或彼此分开。

Person.cs:

public class Person
{
    public string Name { get; set; }
    public string Pass { get; set; }

    public Person(string name = " ", string pass = " ")
    {
        Name = name;
        Pass = pass;
    }

    public string Ts()
    {
        string s = "";
        s += Name;
        s += " ";
        s += Pass;

        return s;
    }
}

如评论中所述,您希望Holder类成为静态实例。一个很好的方法是使用Singleton

Holder.cs:

public class Holder
{
    private static Holder _instance;

    private Holder()
    {
        People = new List<Person>();
    }

    public static Holder Instance
    {
        get
        {
            if (_instance == null)
                _instance = new Holder();

            return _instance;
        }
    }

    public List<Person> People { get; set; }
}

现在,您可以通过以下方式从程序中的任何位置访问您的人员列表(我已在我的示例中将其命名为People):Holder.Instance.People,因此您的点击方法可以立即添加人员看起来像这样:

private void regButton_Click(object sender, EventArgs e)
{
    var person = new Person
    {
        Name = userTextBox.Text,
        Pass = passTextBox.Text
    };

    Holder.Instance.People.Add(person);

    this.Close();

    MessageBox.Show(person.Ts());
}