将包含类对象的列表从 form2 发送到 form1



我想做的是创建一个登录应用程序,您可以在其中注册(用户名和密码(,然后登录。注册是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();
    }
}}

我也读过这个类在静态时不能有 getter 和 setter,这就是我卡住的地方。因此,如果我使类静态,则获取和设置将不起作用,有什么办法可以解决这个问题吗?

表单实际上只是 UI。Person和Holder类不是,所以他们不应该真正生活在form2

Person类和Holder类移出到它们自己的类中,form2或彼此分开。

人.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类是静态实例。执行此操作的一个好方法是使用单例:

支架.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());
}

最新更新