如何实现从子窗口到父窗口的更改
本文关键字:窗口 何实现 实现 | 更新日期: 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......