我的dialogForm有问题。这是我的mainForm开始运行时打开dialogForm(这是一个登录表单)的代码。
private void indexForm_Load(object sender, EventArgs e)
{
startForm loginForm = new startForm();
loginForm.ShowDialog();
indexUsername.Text = klasseGebruikersnaam.gebruikersnaam;
}
因此,当我的indexForm(主窗体)启动时,它首先加载一个dialogForm,这是我的登录表单。
现在我的问题是每当我尝试使用此代码从另一个表单访问mainForm时(例如,当我单击一个按钮时):
this.Hide();
indexForm inf = new indexForm();
inf.Show();
dialogForm再次弹出。所以我想展示我的mainForm但是,当我加载我的mainForm时,我的dialogForm总是会弹出。
有什么方法吗?
提前致谢。
答案 0 :(得分:2)
问题是您正在从主表单的加载事件中加载loginForm
。在调用Main Form
的构造函数之后总会触发它。通常,您需要在加载主窗体之前从某处启动loginForm
。您可以在Program.cs
文件中执行此操作,并将其作为程序的主要入口点。或者只是检查用户是否已经登录。
这是两个例子:
<强> Program.cs的强>
static void Main()
{
//Auto-generated code that VS writes for you
using (var loginForm = new LoginForm())
{
if (loginForm.ShowDialog() == DialogResult.Yes) //Presumably it would only return Yes if the login was successful.
{
Application.Run(new MainForm()); //Or however you call your main form
}
}
}
您可以在主窗体上放置一个属性来确定用户是否已登录。然后您可以在Load
事件中调用它。
加载活动
if(!this.UserLoggedIn)
{
loginForm.ShowDialog();
//Do something with the dialog result.
}
在我看来,最好使用Program.cs
方法,因为如果用户无法正确登录,您可以根据需要退出或处理它,而无需加载主表单。您目前拥有它的方式,主要表单必须在显示登录表单之前加载,这可能会有问题。
答案 1 :(得分:1)
好吧,你应该从主表单中删除该代码并在显示主表单之前调用它 或者您可以简单地设置一个全局变量来保存当前登录用户的信息,如果该变量不为空,则不要再次调用登录表单
因此,请确保您登录表单准备一个LoggedinUser类型的实例变量
public class LoggedinUser
{
public string NickName {get;set;}
public string UserRole {get; set;}
...
}
然后在实用程序类(或索引表单)中,您可以拥有一个静态变量
public static LoggedinUser currentOperator = null;
你可以在index_form中编写
if(GlobaClass.currentOperator == null)
{
using(startForm loginForm = new startForm())
{
if(loginForm.ShowDialog() == DialogResult.OK)
GlobalClass.currentOperator = loginForm.LoggedUser;
}
}
答案 2 :(得分:0)
看起来您需要添加一项检查以查看用户是否已在
周围登录loginForm.ShowDialog();
类似
if(!UserLoggedIn())
{
loginForm.ShowDialog();
}