我在同一名称空间中有两种形式。
一种是显示帐户列表的主要形式。
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以包括新添加的帐户。
答案 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的多个实例,则可以使用一种注册方法,但是这需要您项目的更多代码来考虑。
您也可以阅读以下内容: