0

可能重复:
在另一个表单中发生事件后更新一个表单

相关信息:使用 WPF 应用程序、C#、Visual Studio 2010、.Net 4

我有两个窗口:Window1 和 MainWindow。在 Window1 中,我有一个复选框,选中该复选框后,会将 MainWindow 中的 label1 设置为不可见。我该怎么办?

我不能这样做MainWindow newWindow = new MainWindow(),因为我不想创建一个新的主窗口。我尝试了以下代码,但抛出异常:{“对象引用未设置为对象的实例。”}`。

private void checkBox4_Checked(object sender, RoutedEventArgs e)
{
   if (checkBox4.IsChecked == true)
   {
       (Application.Current.MainWindow as MainWindow).label1.Visibility = 
                   Visibility.Hidden;
   }
   else
   {
       (Application.Current.MainWindow as MainWindow).label1.Visibility = 
                   Visibility.Visible;
   }
}

解决此问题的最佳方法是什么?提前致谢。

4

2 回答 2

2

将事件添加到Window1

public event Action<bool> SomethingChecked; //TODO rename to indicate what was checked

当复选框被选中时,引发该事件:

private void checkBox4_Checked(object sender, RoutedEventArgs e)
{
    if(SomethingChecked != null)
        SomethingChecked(checkBox4.IsChecked);
}

然后从主窗体添加一个事件处理程序:

Window1 other = new Window1();
other.SomethingChecked += checked => label1.Visibility = 
    checked ? Visibility.Visible : Visibility.Hidden;
于 2013-01-24T23:27:00.173 回答
0

在 Window1 中创建一个事件,在 MainWindow 中处理该事件。

只是下面的一个例子,不是真正的工作代码......

MainWindow
{
    private void SomeStuff()
    {
        Window1 window = new Window1();
        window.CheckBoxClick += new OnCheckBoxClick(SomeMethod);
    }

    private void SomeMethod(bool state)
    {
         // use state;
    }
}
于 2013-01-24T23:29:16.483 回答