从局部类调用非静态方法

时间:2019-11-03 09:48:25

标签: c#

我在同一名称空间中有两种形式。

一种是显示帐户列表的主要形式。

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以包括新添加的帐户。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

或您喜欢的任何单例实现。

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

现在您可以致电:

Server.Instance.LoadAcounts();

但是,如果您计划允许Server的多个实例,则可以使用一种注册方法,但是这需要您项目的更多代码来考虑。

您也可以阅读以下内容:

Communicate between two windows forms in C#