如何实现从子窗口到父窗口的更改

本文关键字:窗口 何实现 实现 | 更新日期: 2023-09-27 18:23:58

这可能是一个相当简单的问题,但到目前为止,我在研究它时运气不佳。我有一个子窗口,上面有一个"是"answers"否"按钮。当我单击"否"时,我希望在父窗口(这是我程序的主窗口)中取消选中复选框。

我能做这样的事吗?:

//No Button
private void No_Click(object sender, RoutedEventArgs e)
{
    NameOfParent.checkBox.Checked = false;
}

我看过这个问题,但不认为它能完全解决我的问题。

正确的方法是什么?

我一直在用这个打开我的其他窗口:

父窗口-当前代码:

//Open new window
private void checkBox5_Checked(object sender, RoutedEventArgs e)
{
       var newWindow = new ChildWindow();
       newWindow.button_no.Click += buttonNo_click;
       newWindow.Show();
}
//Unchecks Checkbox 5
private void buttonNo_click(object sender, RoutedEventArgs e)
{
    checkBox5.IsChecked = false;
}

如何实现从子窗口到父窗口的更改

从父窗口打开子窗口:

private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        var window = new ChildWindow();
        window.buttonNo.Click += buttonNo_Click;
        window.Show();
    }

在父窗口的代码中,包括子窗口的无按钮的点击事件:

    private void buttonNo_Click(object sender, RoutedEventArgs e)
    {
        //code to uncheck the checkbox goes here
    }

这比我一直使用的Windows窗体解决方案更简单。。。它似乎也适用于Windows窗体。

在构建子窗口时,只需添加一个父窗口类型的参数。然后,当您在父窗口代码中构建子窗口时,请执行以下操作(在父窗口类中):

ChildWindow child = new ChildWindow(this, other_param, other_param2.....);
ChildWindow.Show();

关键字this将把父窗口传递到ChildWindow

然后你可以将它存储到一个类变量中,并访问它的属性

子类构造函数和parentWindow变量:

private ParentWindowType m_parentWindow = new ParentWindowType();
public ChildWindow(ParentWindowType parent, int other_param, string other_param2....)
{
    m_parentWindow = parent;
}

然后在其他子类方法中,例如按钮单击处理程序,您可以从父窗口访问属性:

public void ButtonClickHandler(....)
{
    m_parentWindow.checkBox1.Enabled = true;
    m_parentWindow.checkBox1.Checked = true;
}

通过这种方式,您可以将父窗口存储在子窗口中,并始终可以访问它。这样做既干净又简单。确保在子窗口类中将父窗口变量设为私有。

如果公开,它将允许你做一些有趣的事情,比如

parentWindow.childWindow.m_parentWindow.childWindow etc......