我正在创建一小块软件。 我有三种形式让我头疼。其中两种形式是单身人士。
不是Singleton的表单是一个登录表单,只能在应用程序启动时显示。然后我在登录表单中输入正确的用户名和密码时会显示一个mainform。这很有效。
然后,从menustrip,您可以切换到另一个包含用户列表的表单以及有关这些的一些信息。在那个表单上,我有一个按钮,可以将您带回到主窗体。当我按下那个按钮,而不是直接将我带回主要表格时,我再次看到了登录表单。
点击menustrip项目触发的代码,将您从主窗体带到用户窗体:
private void miBrugere_Click(object sender, EventArgs e)
{
userForm = Userform.Instance;
this.Hide();
userForm.Show();
}
它应该从用户窗体带回到主窗体的代码:
private void btnBack_Click(object sender, EventArgs e)
{
Mainform mainForm = Mainform.Instance;
this.Hide();
mainForm.Show();
}
在我的mainform加载时运行的代码:
private void Mainform_Load(object sender, EventArgs e)
{
if (firstLoad)
{
firstLoad = false;
Loginform loginForm = new Loginform();
this.Hide();
loginForm.ShowDialog();
}
}
firstLoad变量是classwide。
提前致谢: - )
我已经把它归结为我第一次运行此代码时在userform上创建实例:
public Userform()
{
InitializeComponent();
dgvUsers.AllowUserToAddRows = false;
Mainform mainForm = Mainform.Instance;
connString = mainForm.connString;
--Awesome stuff--
}
显然,在调用Mainform.instance时,实例为null,因此它创建了一个新的mainform实例,而不是检索已经使用过的实例。当然,这意味着,因为firstLoad是一个类范围的变量,所以它将再次设置为true。
答案 0 :(得分:0)
您的应用程序的主要入口点(通常是主要入口点) Program.cs中新创建的Windows窗体应用程序的方法) 看起来像?如果它像Application.Run(new Mainform());, 然后你的Mainform不是单身人士。你可能想尝试一下 Application.Run(Mainform.Instance)
答案来自科拉克,所以支持他!