我有两种表单Login和Main表单。最初,将显示登录表单,当用户通过身份验证时,将显示主表单并关闭登录表单。
它有点工作,但我必须两次点击btnLogin(登录表单中的一个按钮)才能关闭登录表单并显示主表单。
这是我的代码。
Program.cs (登录表单)
namespace Login
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Login fLogin = new Login();
if (fLogin.ShowDialog() == DialogResult.OK)
{
Application.Run(new Main());
}
}
}
}
登录表单
namespace Login
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}
private void Login_Load(object sender, EventArgs e)
{
}
private void btnLogin_Click(object sender, EventArgs e)
{
// initially btnLogin has a DialogResult property set to None
Authenticate();
}
private void Authenticate()
{
SqlCeConnection conn = new SqlCeConnection(@"Data source=d:/BIMS.sdf");
conn.Open();
SqlCeCommand cmd = new SqlCeCommand(Properties.Resources.CheckIfUserExists, conn);
cmd.Parameters.Add("username", txtUsername.Text.Trim());
cmd.Parameters.Add("password", txtPassword.Text.Trim());
SqlCeDataReader dr = cmd.ExecuteReader();
bool hasRow = dr.Read();
if (hasRow)
{
btnLogin.DialogResult = DialogResult.OK;
}
}
}
}
你认为我做错了什么? 感谢....
答案 0 :(得分:3)
只需更改
if (hasRow)
{
// btnLogin.DialogResult = DialogResult.OK;
this.DialogResult = DialogResult.OK;
this.close();
}
答案 1 :(得分:1)
如果要关闭表单(在设置了所需的Form.Close()
之后),则应该在按钮事件处理程序中调用DialogResult
。
据我所知,这不会自动发生。
我从来没有采用任何其他方式,这种方法一直对我有用。
答案 2 :(得分:1)
试试这个: -
命名空间登录
{
静态类程序
{ /// ///应用程序的主要入口点。 ///
[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Login()); }
}
}
&GT;
命名空间登录 { 公共部分登录:表格 { 公共登录() { 的InitializeComponent(); }
private void Login_Load(object sender, EventArgs e)
{
}
private void btnLogin_Click(object sender, EventArgs e)
{
// initially btnLogin has a DialogResult property set to None
Authenticate();
}
private void Authenticate()
{
SqlCeConnection conn = new SqlCeConnection(@"Data source=d:/BIMS.sdf");
conn.Open();
SqlCeCommand cmd = new SqlCeCommand(Properties.Resources.CheckIfUserExists, conn);
cmd.Parameters.Add("username", txtUsername.Text.Trim());
cmd.Parameters.Add("password", txtPassword.Text.Trim());
SqlCeDataReader dr = cmd.ExecuteReader();
bool hasRow = dr.Read();
if (hasRow)
{
Main formmain = new Main();
formmain.Show();
this.Dispose(); // U can also use this.Close();
}
}
}
}
答案 3 :(得分:0)
最有可能是您的Authenticate()出现问题。你可以删除该代码,只需
private void Authenticate()
{
btnLogin.DialogResult = DialogResult.OK;
}
这将告诉您问题是使用验证码还是使用gui。
如果使用您的身份验证码,您可能需要多做一些来访问数据库(检查并查看您是否已连接等等)
答案 4 :(得分:0)
如上一篇文章所述,Authenticate方法可能存在问题...... 可能需要更长的时间来访问数据库.. 下面的代码将帮助我们了解Authenticate是否已完成处理......
private void btnLogin_Click(object sender, EventArgs e)
{
btnLogin.Enabled = false;
// initially btnLogin has a DialogResult property set to None
Authenticate();
// better place call to Authenticate in try catch blocks
// to prevent btnLogin in a disabled state forever if Authenticate fails with
// an exception ...
// also if an exception occurs show that in a message box
btnLogin.Enabled = true;
}
在Main中,一旦用户通过身份验证,请关闭登录表单
Login fLogin = new Login();
if (fLogin.ShowDialog() == DialogResult.OK)
{
fLogin.Close();
Application.Run(new Main());
}