2013-11-16 3 views
4

Хорошо, допустим, у меня есть два окна. В первой из них у меня есть методНевозможно вызвать метод из другого окна в C# WPF

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

А во втором я называю этот метод:

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

Но ничего не происходит. Что я делаю не так? Благодарю.

+0

Ну, я предположим, что ваш MainWindow уже открыт, что ваш код делает это создать еще один MainWindow и попытаться выполните метод, не показывая его. Как создается второе окно? он создается в окне MainWindow? –

+0

Да, это так. Итак, есть ли способ сделать это? –

ответ

9

Вы можете назначить Владелец окну, которое было создано в вашем MainWindow.

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

Тогда вы должны иметь доступ к нему примерно так.

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

MainWindow

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(); 
    } 
} 
+0

Работает, спасибо большое! –

+0

Добро пожаловать, рад помочь. –

+0

@MarkHall Есть ли способ обхода при использовании window.ShowDialog? Событие Loaded запускается после возврата управления в главное окно в этом случае ... – pzogr

0

Почему вы пытаетесь таким образом.

public string Test() 
{ 

    return "works"; 
} 

MainWindow mw = new MainWindow(); 


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

На самом деле это не решает проблему. Если метка находится во второй форме, вам нужно будет вызвать 'mw.lblsecondwindow.Text', предполагая, что метка даже доступна. –

0

Вы создаете другой объект MainWindow, как показано ниже:

MainWindow mw = new MainWindow(); 

вместо создания нового объекта MainWindow использовать существующий (я предполагаю, что вы уже создали MainWindow объект раньше).

Попробуйте:

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

, если вы можете показать fullcode это HEPS нам.

Смежные вопросы