C# 如何实现从子窗口到父窗口的更改
这可能是一个相当简单的问题,但到目前为止,我还没有幸对此进行研究。我有一个儿童窗口,上面有“是”和“否”按钮。单击“否”时,我希望父窗口(我的程序的主窗口)中的复选框处于未选中状态 还有什么我可以做的吗C# 如何实现从子窗口到父窗口的更改,c#,wpf,parent-child,C#,Wpf,Parent Child,这可能是一个相当简单的问题,但到目前为止,我还没有幸对此进行研究。我有一个儿童窗口,上面有“是”和“否”按钮。单击“否”时,我希望父窗口(我的程序的主窗口)中的复选框处于未选中状态 还有什么我可以做的吗 //No Button private void No_Click(object sender, RoutedEventArgs e) { NameOfParent.checkBox.Checked = false; } 我见过这个问题,但并不认为它完全解决了我的问题 正确的方法是什么
//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();
}
public void ButtonClickHandler(....)
{
m_parentWindow.checkBox1.Enabled = true;
m_parentWindow.checkBox1.Checked = true;
}
在父窗口的代码中,为子窗口的“否”按钮包含此单击事件:
private void buttonNo_Click(object sender, RoutedEventArgs e)
{
//code to uncheck the checkbox goes here
}
事实证明,这比我一直使用的Windows窗体解决方案更简单……而且它似乎也适用于Windows窗体。关于子窗口的构造,只需添加父窗口类型的参数即可。 然后,在父窗口代码中构造子窗口时,请执行以下操作(在父窗口类中): 关键字this将把父窗口传递到子窗口 然后可以将其存储到类变量中并访问其属性 子类构造函数和parentWindow变量:
private ParentWindowType m_parentWindow = new ParentWindowType();
public ChildWindow(ParentWindowType parent, int other_param, string other_param2....)
{
m_parentWindow = parent;
}
然后,在其他子类方法中,例如按钮单击处理程序,您可以从父窗口访问属性:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
var window = new ChildWindow();
window.buttonNo.Click += buttonNo_Click;
window.Show();
}
public void ButtonClickHandler(....)
{
m_parentWindow.checkBox1.Enabled = true;
m_parentWindow.checkBox1.Checked = true;
}
这样,您可以将父窗口存储在子窗口中,并且始终可以访问它。
这样做既干净又简单。确保在子窗口类中将父窗口变量设为私有
如果公开,你可以做一些有趣的事情,比如
parentWindow.childWindow.m_parentWindow.childWindow etc......
是的,有一种方法,但你不想这样做。创建一个合适的ViewModel,并通过数据绑定(这是正确的方法)执行此操作。或者使用消息框架并将所有必要的部分订阅到正确的消息。form2应该是我的子窗口吗?我只是不知道该在表格上写些什么。顺便说一下,这是WPF,不是Win表单。啊,我还不熟悉WPF,所以我不确定它们有多不同。在Windows窗体中,我通过编写
ChildForm Form2=new ChildForm()打开子窗体然后在下面,Form2.ButtonClickAction+=form_ButtonClickAction
,它调用包含代码的void,当子窗体中的按钮单击事件触发公共事件操作按钮ClickAction
时,我希望发生什么。好吧,我创建了自己的小WPF程序并解决了它。编辑我的答案以与WPF相关。如果它显示ChildWindow,您需要为此包含任何内容吗?我一直在使用var打开我的窗口。我将发布我的代码。我不认为使用var会有任何区别,它的关键部分是下一行,它只是告诉父窗体在单击子窗体上的buttonNo时运行buttonNo\u Click方法。