这可能是一个相当简单的问题,但到目前为止我没有运气研究过。我有一个子窗口,上面有yes和no按钮。当我单击否时,我希望在父窗口(这是我的程序的主窗口)中取消选中复选框。
无论如何我能做点什么?:
//No Button
private void No_Click(object sender, RoutedEventArgs e)
{
NameOfParent.checkBox.Checked = false;
}
我看过this问题,但不认为它完全解决了我的问题。
解决这个问题的正确方法是什么?
我一直用它来打开我的其他窗口:
父窗口 - 当前代码:
//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;
}
答案 0 :(得分:2)
从父窗口打开子窗口:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
var window = new ChildWindow();
window.buttonNo.Click += buttonNo_Click;
window.Show();
}
在父窗口的代码中,为子窗口的no按钮包含此click事件:
private void buttonNo_Click(object sender, RoutedEventArgs e)
{
//code to uncheck the checkbox goes here
}
这比我一直在使用的Windows Forms解决方案更简单......它似乎也适用于Windows Forms。
答案 1 :(得分:-1)
在构建子窗口时,只需添加一个父窗口类型的参数即可。 然后,当您在父窗口代码中构建子窗口时,请执行以下操作(在父窗口类中):
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......