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模式