代码之家  ›  专栏  ›  技术社区  ›  Sergio Tapia

我怎样才能触发一个事件,让我的另一个形式对它作出反应?

  •  2
  • Sergio Tapia  · 技术社区  · 14 年前

    我有一个叫做mainform.cs的表单。单击“输入程序”按钮时,将使用.showDialog()方法显示另一个窗体。

    在这个名为loginbox.cs的新表单中,我检查输入的凭证是否有效,如果有效,我希望我的mainform.cs对一个正响应(实际的软件表单打开)或负响应作出反应,一个消息框警告他失败。

    这是一个非常简单的用例,但我不知道如何正确有效地解决这个问题。谢谢您。

    private void button1_Click(object sender, EventArgs e)
            {
                LoginBox login = new LoginBox();
                login.ShowDialog();
            }
    
    //And in the LoginBox.cs file:
    private void button1_Click(object sender, EventArgs e)
            {
                if ((txtUser.Text == "admin") && (txtPassword.Text == "123"))
                {
    
                }
            }
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Mark Byers    14 年前

    如果用 ShowDialog 它返回一个 DialogResult 你可以在你的主表上登记。

    LoginBox login = new LoginBox();
    DialogResult dialogResult = login.ShowDialog();
    if (dialogResult == DialogResult.OK)
    {
         // etc...
    }
    

    您可以设置 对话结果 在你 LoginBox 形式:

    DialogResult = DialogResult.OK;
    
        2
  •  1
  •   STW    14 年前

    其他人提到使用 DialogResult ,它可以工作——但在这个用例中可能会被滥用。它的目的是让父窗体知道用户在子窗体上做了什么--他们是否单击 OK Cancel ?他们点击了吗? Retry Abort ?它不应该被用于身份验证,这是不直观的。

    那么——还有什么更好的呢?可能是一个组合…

    你的 LoginBox 一个对话框,因此返回 对话结果 应该是预期的--但也应该只用于指示用户在 Form ,而不是身份验证的结果。

    我建议您研究一下其他对话的用法,例如 OpenFileDialog . 它返回一个 对话结果 指定是否继续打开文件 但在被明确要求打开文件之前,它不会真正打开文件。这意味着消费代码必须同时检查结果并指示对话框执行其功能,所以这并不完全简单——但它相当传统。

    以下是我建议您使用的示例 登录箱 :

    private void button1_Click(object sender, EventArgs e)
    {
        LoginBox login = new LoginBox();
        if (login.ShowDialog() == DialogResult.OK) // Let the user input their credentials and click OK or Cancel
        {
            if (!login.ValidateCredentials) // Perform the authentication with the collected credentials
            {
                MessageBox.Show("The specified Credentials were invalid!");
            }
        }
    }
    
        3
  •  0
  •   DaveWilliamson    14 年前

    向登录框中添加事件。然后让主窗体处理该事件。在事件处理程序中,继续执行要执行的其他逻辑。