簡體   English   中英

從部分 class 調用非 static 方法

[英]Call non static method from partial class

我在同一個命名空間中有兩個 forms 。

一種是顯示帳戶列表的主窗體。

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”class 中創建“Server”class 的實例屬性。 但是,我應該說這是增加 class 耦合,絕對不是一個好的模式。

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

如果您只有一個Server表單實例,則可以將其設置為 singleton 以便能夠調用該方法。

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

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

或您喜歡的任何 singleton 實現。

因此,您將通過Server.Instance更改對Server的所有訪問權限。

現在您可以致電:

Server.Instance.LoadAcounts();

但是,如果您計划允許多個服務器實例,則可以使用注冊方法,但它需要您的項目的更多代碼來考慮這一點。

您還可以閱讀以下內容:

在 C# 中的兩個 windows forms 之間進行通信

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM