登录表单中不需要的循环

时间:2015-02-13 20:19:33

标签: c# winforms loops login

您好我遇到了一个简单的问题,但无法找到解决方案(星期五寻找周末......)

我有一个mainform和一个Loginform。我的Mainform在Load中调用Loginform。填写Loginform后,我的登录应该关闭并调用Mainform。但是我的登录又出现了......有人可以帮我解决这个问题:

的MainForm:

using System;
.
.
.
using System.Threading;


namespace HBAPackageConfig
{
    public partial class Form1 : Form
    {


        public Form1()
        {
            InitializeComponent();
            string getcsv = TestCSV();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            runform4();
        }

        private void runform4()
        {
            Form4 loginForm = new Form4();

            // Show the settings form
            loginForm.TopLevel = true;
            loginForm.ShowDialog();
        }

登录

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace HBAPackageConfig
{
    public partial class Form4 : Form
    {
        Form1 mainform = new Form1();

        public Form4()
        {
            InitializeComponent();


        }

        private void Form4_Load(object sender, EventArgs e)
        {
            this.BringToFront();
            checkBox1.Checked = true;
            txtPass.KeyPress += new KeyPressEventHandler(this.txtPass_KeyPress);



        }

        private void btnLogin_Click_1(object sender, EventArgs e)
        {
            loginCheck();
        }


        public void loginCheck()
        {
            //put into the bracket the password,and username you want
            if (txtUser.Text.ToString().CompareTo("Customer") == 0 & txtPass.Text.ToString().CompareTo("Password") == 0)
            {
                MessageBox.Show("Login Sucessfull.Click OK to continue", "Login", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Hide();     //hide the login form
                mainform.Show();
            }
            else
            {
                MessageBox.Show("Wrong Username/Password! \n Please try again!", "Login", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtPass.Text = ""; //delete writed password
                txtUser.Text = ""; //delete writed username
            }
        }

3 个答案:

答案 0 :(得分:1)

在您的主要表单中,您正在执行此操作:

  • 创建登录表单
  • 显示登录表单

然后在您的登录表单中执行此操作:

  • 创建主表单
  • 显示主表单

因此无限循环。

您的登录表单不需要创建主表单。已经 是主要表单。 所需要的所有登录表单都是自行关闭的,屏幕上已有的主要表单应该仍然存在。

如果我们还没有看到并且现有的主要表单 需要再次显示,那么应该使用现有< / em>主要形式而不是新形式。因此登录表单需要对主表单的引用。

您可以通过将其添加到登录表单的构造函数来完成此操作:

Form1 mainform;

public Form4(Form1 mainFormReference)
{
    InitializeComponent();

    this.mainform = mainFormReference;
}

然后,当从主窗体调用登录表单时,将引用传递给自己:

Form4 loginForm = new Form4(this);

当登录表单执行此操作时:

mainform.Show();

它将在现有主表单上调用.Show()而不是新表单。

答案 1 :(得分:0)

您似乎已经创建了两个Form1实例:您创建和显示登录表单的表单,以及一个登录表单的成员变量。当用户成功登录时,您将从登录表单中调用mainform.Show()以显示您创建的第二个实例。这不是必要的;大概在你的启动代码的某个地方就有这样的一行:

Application.Run(new Form1());

您进入主窗体的Load事件处理程序这一事实表明它已经处于显示过程中。当您从登录表单的ShowDialog()方法返回时,初始表单将完成加载并显示自己。

答案 2 :(得分:-1)

您需要一种方法让Form1知道Form4已经运行且登录成功。您可以在Form1上使用缓存或公共属性,也可以使用任意数量的方法。

然后在Form1&#39s的加载中,如果用户尚未登录,则只运行Form4。