0

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

无论如何我可以做类似的事情吗?:

//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;
}
4

2 回答 2

2

从父窗口打开子窗口:

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 窗体中工作。

于 2013-07-18T15:34:19.107 回答
-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......
于 2013-07-18T16:58:27.267 回答