【问题标题】:Can't call a method from another window in C# WPF无法从 C# WPF 中的另一个窗口调用方法
【发布时间】:2013-11-29 15:38:41
【问题描述】:

好的,假设我有两个窗口。在第一个中,我有一个方法

public void Test()
{
    Label.Content += " works";
}

在第二个中我称之为这个方法:

MainWindow mw = new MainWindow();
mw.Test();

但是什么也没发生。我究竟做错了什么?谢谢。

【问题讨论】:

  • 好吧,我假设您的 MainWindow 已经打开,您的代码所做的是创建另一个 MainWindow 并尝试执行一个方法而不显示它。第二个窗口是如何创建的?它是在 MainWindow 窗口中创建的?
  • 是的。那么,有没有什么办法呢?

标签: c# class methods


【解决方案1】:

您可以将所有者分配给在 MainWindow 中创建的窗口。

window.Owner = this; //This is added to the code that use to create your Window

那么你应该可以像这样访问它。

((MainWindow)this.Owner).Test();

主窗口

public partial class MainWindow : Window
{
    Window1 window = new Window1();
    public MainWindow()
    {
        InitializeComponent();
        window.Show();


    }

    public void Test()
    {
        label1.Content += " works";
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        window.Owner = this;
    }


}

第二个窗口

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();


    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ((MainWindow)this.Owner).Test();
    }
}

【讨论】:

  • @MarkHall 使用 window.ShowDialog 时有什么解决方法吗?在这种情况下,将控制权返回到主窗口后会触发 Loaded 事件...
  • @pzogr 两个窗口都在同一个线程上运行。如果您使用 ShowDialog,它会创建一个模态窗口,当模态窗口打开时,该窗口将阻止任何代码在所属窗口中运行,这是设计使然。如果您想要一个模态窗口的原因是为了限制对所有者的操作,您可能需要尝试将所有者只读属性设置为 true 并使用本示例中的 Show。除此之外,我想不出别的办法了。
【解决方案2】:

你为什么要这样尝试。

public string Test()
{

   return  "works";
}

 MainWindow mw = new MainWindow();


 // Your second form label.
 lblsecondwindow.Text = mw.Test();

【讨论】:

    【解决方案3】:

    您正在创建MainWindow 的另一个对象,如下所示:

    MainWindow mw = new MainWindow();
    

    不要创建新的MainWindow 对象,而是使用现有的对象(我假设您之前已经创建了MainWindow 对象)。

    试试这个:

    oldmaindwindow.Test();//here oldmainwindow is an old object of MainWindow
    

    如果您可以显示完整代码,我们会很高兴。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2013-02-17
      相关资源
      最近更新 更多