调用mainForm时C#DialogForm打开

时间:2014-05-16 13:33:39

标签: c# winforms dialog

我的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总是会弹出。

有什么方法吗?

提前致谢。

3 个答案:

答案 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();
}