C# 按下按钮后如何设置DialogResult?

C# 按下按钮后如何设置DialogResult?,c#,winforms,C#,Winforms,我正在使用Windows窗体设计器创建一个密码窗口,只是上下文稍有不同。有几个输入字段,其中一个受密码保护。有一个“更改”按钮,在主窗口的顶部生成一个新的密码窗口。用户输入密码并按下“OK”。我需要一种方法让OK按钮检查密码,然后发送一个对话框Result。OK返回主窗口,或者如果尝试不正确,则显示一个“错误的密码”。这意味着我无法将DialogResult设置为DialogResult.OK初始设置,因此我不确定如何执行此操作 目前,我在单击事件函数中将DialogResult设置为Dialo

我正在使用Windows窗体设计器创建一个密码窗口,只是上下文稍有不同。有几个输入字段,其中一个受密码保护。有一个“更改”按钮,在主窗口的顶部生成一个新的密码窗口。用户输入密码并按下“OK”。我需要一种方法让OK按钮检查密码,然后发送一个对话框Result。OK返回主窗口,或者如果尝试不正确,则显示一个“错误的密码”。这意味着我无法将
DialogResult
设置为
DialogResult.OK
初始设置,因此我不确定如何执行此操作

目前,我在单击事件函数中将
DialogResult
设置为
DialogResult.OK
,但显然这会将其设置为下次单击,而不是当前单击,因此用户必须按两次OK按钮

private void buttonOK_Click(object sender, EventArgs e)
{
    string passwordAttempt = textBoxPassword.Text;
    if( passwordAttempt.CompareTo("pass") == 0 )
    {
        this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
    }
}
一种可能的解决方案是通过代码触发第二个事件(不确定如何执行)。或者,在这种情况下,有没有更好的方法来使用我没有想到的密码窗口

  • 将对话框的
    AcceptButton
    设置为
    buttonOK
    (确定按钮)。您可以在代码或设计器中执行此操作
  • 设置对话框窗体的
    对话框结果
    ,而不是按钮
  • 代码:


    改为分配此对话框结果。您应该做的是与设计器一起设置OK按钮的DialogResult,使其成为带有重边框的默认按钮,并且Enter键可以工作,如果您对密码不满意,请将this.DialogResult设置回None。是的,这样可以工作。如果用户再次尝试,该如何工作?然后,DialogResult将以None启动,并且必须重新设置。如果将按钮设置为DialogResult.OK并按下该按钮,则在进入click事件处理程序之前,窗体DialogResult属性将设置为与clicked button DialogResult属性相同。如果在事件处理程序中,您将窗体的DialogResult属性更改为None,则窗体不会关闭,您可以再次尝试该过程,直到您对用户inputAdd
    this.close()满意为止
    
    this.AcceptButton = buttonOK;
    
    ...
    
    private void buttonOK_Click(object sender, EventArgs e)
    {
        string passwordAttempt = textBoxPassword.Text;
        if (passwordAttempt.CompareTo("pass") == 0)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            Close();
        }
    }