C# 如何仅在满足某些条件时从按钮单击返回对话框结果“确定”

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

我正在尝试在VisualStudioWinForms中创建一个带有数据验证(用户名、密码)的消息框 我已经做了另一个只有密码,将采取文本框文本加密它,并将其与存储的加密密码进行比较

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;
        }