C# 从分部类调用非静态方法

C# 从分部类调用非静态方法,c#,C#,我在同一名称空间中有两个表单 一个是显示帐户列表的主窗体 public partial class Server : Form { public Server() { InitializeComponent(); LoadAcounts(); } public void LoadAcounts() { AccountDB acc = new AccountDB(); userListBox

我在同一名称空间中有两个表单

一个是显示帐户列表的主窗体

public partial class Server : Form
{

    public Server()
    {
        InitializeComponent();
        LoadAcounts();
    }

    public void LoadAcounts()
    {
        AccountDB acc = new AccountDB();
        userListBox.DataSource = acc.ListUsers();

        this.userListBox.SelectedIndex = 0;
    }
}
二是登记表

public partial class RegForm : Form
{
    public RegForm()
    {
        InitializeComponent();

        passBox.Text = "";
        passBox.PasswordChar = '*';
        passBox.MaxLength = 14;
        passBox2.Text = "";
        passBox2.PasswordChar = '*';
        passBox2.MaxLength = 14;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (passBox.TextLength >= 4 && passBox.Text == passBox2.Text && usernameBox.TextLength >= 4)
        {
            AccountDB acc = new AccountDB();
            if (acc.UserExist(usernameBox.Text))
            {
                MessageBox.Show("User already exists!");
            }
            else
            {
                string user = usernameBox.Text;
                string pw = PasswordHash.HashPassword(passBox.Text);

                WriteDB(user, pw);
                this.Close();
                MessageBox.Show("Registration successful!");
                //LoadAccounts();
            }
        }
    }
}

我目前一直在想注册成功后如何调用LoadAccounts(),以便刷新userListBox以包含新添加的帐户。

我不确定您的设计,但您可以在“RegForm”类中创建“Server”类的实例属性但是,我应该说这增加了类耦合,而且肯定不是一个好模式。

public partial class RegForm : Form
{
    public Server serverFormInstance {get; set;}//must be filled from caller code
...
...

如果您只有一个
服务器
表单的实例,则可以将其作为一个单例来调用该方法

public class Server : Form
{
  static internal readonly Server Instance = new Server ();

  private Server()
  {
    InitializeComponent();
    LoadAcounts();
  }
}
或者任何您喜欢的单例实现

因此,您将通过
Server.Instance
更改对
Server
的所有访问权限

现在您可以拨打:

Server.Instance.LoadAcounts();
但如果您计划允许多个服务器实例,则可以使用注册方法,但这需要更多的项目代码来考虑

您还可以阅读以下内容:


您想调用
服务器的哪个实例
表单?注册成功后,我需要调用LoadAccounts(),列表框将被刷新。
RegForm
需要引用活动的
服务器
表单。使用messenger?@marneee research mediator模式