Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何激发一个事件,使我的其他窗体对其作出反应?_C#_.net_Winforms - Fatal编程技术网

C# 我如何激发一个事件,使我的其他窗体对其作出反应?

C# 我如何激发一个事件,使我的其他窗体对其作出反应?,c#,.net,winforms,C#,.net,Winforms,我有一张叫做MainForm.cs的表格。当我单击“输入程序”按钮时,我使用.ShowDialog()方法显示另一个表单 在这个名为LoginBox.cs的新表单中,我检查输入的凭据是否有效,如果有效,我希望我的MainForm.cs以肯定响应(实际的软件表单打开)或否定响应作出反应,并显示一个消息框,提醒他失败 这是一个非常简单的用例,但我不知道如何正确有效地解决这个问题。多谢各位 private void button1_Click(object sender, EventArgs e)

我有一张叫做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"))
            {

            }
        }

将事件添加到登录框。然后让MainForm处理该事件。在事件处理程序中,继续执行您要执行的附加逻辑。

如果打开表单,它将返回一个可在主表单中检查的

LoginBox login = new LoginBox();
DialogResult dialogResult = login.ShowDialog();
if (dialogResult == DialogResult.OK)
{
     // etc...
}
您可以在
LoginBox
表单中设置
DialogResult
的值:

DialogResult = DialogResult.OK;

其他人提到了使用
DialogResult
,它可以工作,但在本用例中可能会被滥用。它的目的是让父表单知道用户在子表单上做了什么——他们是单击了
OK
还是
Cancel
?他们是否单击了
重试
中止
?将其用于身份验证目的并不直观

那么,什么更好?可能是一个组合

您的
LoginBox
类是一个对话框,因此返回
DialogResult
应该是预期的,但也应该仅用于指示用户在
表单上所做的操作,而不是身份验证的结果

我建议研究一些其他对话框的使用,例如
OpenFileDialog
。它返回一个
对话框result
,以指定是否继续打开文件,但在被明确告知打开文件之前,它实际上不会打开文件。这意味着消费代码必须检查结果并指示对话框执行其功能,因此这并不十分简单,但它相当常规

下面是我建议您如何使用
LoginBox
的一个示例:

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!");
        }
    }
}
LoginBox
只是收集凭据,还是它也执行身份验证?