[英]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();
但是,如果您計划允許多個服務器實例,則可以使用注冊方法,但它需要您的項目的更多代碼來考慮這一點。
您還可以閱讀以下內容:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.