首页 > 解决方案 > 仅当满足某些条件时,如何从按钮单击返回对话框结果 ok

问题描述

我正在尝试在 Visual Studio winforms 中创建一个带有 datavalidation(username, Password) 的服装消息框

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

这样我可以轻松捕获返回的对话结果。但是在我必须从数据库验证用户名和密码的情况下,我不能使用文本更改事件,因为每次更改用户名或密码文本时它都会连接到数据库所以我尝试了下面的代码这部分是我在密码验证类中调用的对话结果

public static DialogResult UserLogin()
    {
        using (FORMS.USER_LOGIN MSGPASS = new FORMS.USER_LOGIN())
        {
            DialogResult DLresult = MSGPASS.ShowDialog();
            return DLresult;
        }
    }

这是 USER_LOGIN 表单代码

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;

同时当我使用具有对话结果属性=取消的按钮取消时,结果正常工作。所以我想知道的是我是否犯了一个错误,或者当我单击确认按钮时是否有另一种方法可以返回 DialogueResult.OK?

标签: c#winforms

解决方案


这是一个简单的解决方案:在 MainForm 中,您使用此代码打开对话框表单(在按钮单击或您想要的位置):

DialogForm form = new DialogForm();
 if(form.ShowDialog() == DialogResult.OK)
 {
     // show menu
 }

在登录和取消事件中的对话框表单中,您需要与此相似:

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

推荐阅读