C# 如何仅在满足某些条件时从按钮单击返回对话框结果“确定”
我正在尝试在VisualStudioWinForms中创建一个带有数据验证(用户名、密码)的消息框 我已经做了另一个只有密码,将采取文本框文本加密它,并将其与存储的加密密码进行比较C# 如何仅在满足某些条件时从按钮单击返回对话框结果“确定”,c#,winforms,C#,Winforms,我正在尝试在VisualStudioWinForms中创建一个带有数据验证(用户名、密码)的消息框 我已经做了另一个只有密码,将采取文本框文本加密它,并将其与存储的加密密码进行比较 private void TextBoxPass_TextChanged(object sender,EventArgs e) { //Storedpassword is the stored password and ButtonOk is the confirm Button //Encrypt
private void TextBoxPass_TextChanged(object sender,EventArgs e)
{
//Storedpassword is the stored password and ButtonOk is the confirm Button
//Encrypt is the encription function
if(Encrypt(TextBoxPass.Text)==StoredPassword)
ButtonOk.DialogueResult=DialogueResult.OK;
}
通过这种方式,我可以轻松捕获返回的对话结果。
但是如果我必须从数据库中验证用户名和密码,我不能使用文本更改事件,因为每次更改用户名或密码文本时,它都会连接到数据库,所以我尝试了下面的代码
这部分是我在类passwordvalidation中调用的对话结果
public static DialogResult UserLogin()
{
using (FORMS.USER_LOGIN MSGPASS = new FORMS.USER_LOGIN())
{
DialogResult DLresult = MSGPASS.ShowDialog();
return DLresult;
}
}
这是表单用户登录表单代码
private DialogResult drslt(string USRNME,string Pss)
{
//Some code to Verify UserName and Password
//from database and return DataTable dt
DialogResult DR;
//COMPARE
if (dt.Rows.Count == 1)
{
//login successful
DR = DialogResult.OK;
}
else
{
//login unsuccussful
DR = DialogResult.None;
}
return DR;
}
private void BULCONFIRM_Click(object sender, EventArgs e)
{
DialogResult DRS =drslt(TBULNAME.Text,TBULPassword.Text);
if (DRS == DialogResult.OK)
this.Close();
else
CLASS.CostumeMessages.ShowMessage("","",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
当我试图捕捉对话结果时,它关闭ShowDialogue表单,但没有给出正确的对话结果值
//Calling the DialogueResult
if(PasswordValidation.UserLogin()==DialogResult.OK)
//do some stuff;
同时,当我使用带有对话框ueresult proprety=Cancel的按钮Cancel时,结果正常工作。
因此,我想知道的是,我是否犯了错误,或者是否有其他方法返回DialogueResult.OK,当我单击确认按钮时???以下是一个简单的解决方案:
在MainForm中,您可以使用此代码打开对话框窗体(在按钮中或您想要的位置):
在对话框形式中,您在登录时和在取消事件中需要与此相似:
private void Login_Click(object sender, EventArgs e)
{
//Check if password is ok
if(txtPassword.Text == "test")// check the password
{
this.DialogResult = DialogResult.OK;
}
else
{
// show error if password did not match
}
}
private void Cancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
您需要根据需要设置
this.DialogResult=DialogResult.OK
或this.DialogResult=DialogResult.Cancel
。这样做之后,您不需要调用this.Close()
,因为设置this.DialogResult
的动作会自动关闭对话框。
private void Login_Click(object sender, EventArgs e)
{
//Check if password is ok
if(txtPassword.Text == "test")// check the password
{
this.DialogResult = DialogResult.OK;
}
else
{
// show error if password did not match
}
}
private void Cancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}