您好我遇到了一个简单的问题,但无法找到解决方案(星期五寻找周末......)
我有一个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
}
}
答案 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。