如何从子窗体发送“消息”到父窗体?

时间:2019-01-19 18:46:46

标签: c# .net winforms

我有两种形式: 表格1:家长:登录屏幕 Form2:孩子:申请

当应用程序启动时,将显示Form1。用户输入密码,如果此密码与常量匹配,则将隐藏Form1,并显示Form2。 现在,当我使用“注销”按钮关闭Form2时,我将向Form1发送一个“消息”,以便它可以再次显示。将此视为Messenger应用程序。注销后,它将带您返回登录屏幕。

我正在搜索两天,但找不到对我有用的任何东西。很抱歉,如果这个问题是重复的。

3 个答案:

答案 0 :(得分:0)

string.split(regexp)中,您可以先打开第二个表单的Form1事件,然后再打开它:

FormClosed

然后,您可以在var form2 = new Form2(); form2.FormClosed += Form2_FormClosed; form2.Show(); 中的事件处理程序中做任何有用的事情:

Form1

答案 1 :(得分:0)

Form1:

创建静态和公共变量

static public string message = "Message from Form1";

Form2

使用此变量

MessageBox.Show(Form1.Message, " Message");

答案 2 :(得分:0)

我建议您使用“主/申请表”作为父项,并将“登录表”显示为“子项”。在主/父表单的“显示”事件中显示带有ShowDialog()的登录表单(例如)。根据您的Form类的智能程度,您可能必须在下面更改一些代码。下面的代码示例暗示,“登录”表单执行所有登录逻辑。然后,它会在关闭时使用DialogResult属性向其父级发出登录是否成功的信号。

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    private void ButtonLogoutClick(object sender, EventArgs e)
    {
        LoginUser();
    }

    private void MainFormShown(object sender, EventArgs e)
    {
        LoginUser();
    }

    private void LoginUser()
    {
        using (var loginForm = new LoginForm())
        {
            var loginResult = loginForm.ShowDialog();
            if (loginResult == DialogResult.OK)
            {
                //Login Success
                var userId = loginForm.User.ID; //Query user ID from Login Form for example
            }
            else
            {
                //Login Failed
                Close(); //Close Program for example
            }
        }
    }
}