2016-05-17 9 views
0

Ich entwickle ein kleines Spiel in WPF mit C#. Ich habe 2 Windows gleichzeitig geöffnet, ein Fenster für player1 und ein Fenster für player2.Wie führe ich Funktionen aus dem Hauptfenster aus?

Jetzt möchte ich eine Funktion in Player1 starten, wenn ich auf eine Schaltfläche im Fenster von Player2 klicke.

Ich versuchte es mit:

Player1 play1 = new Player1(); 
play1.Function(); 

Dann ist es die Funktion in einem dritten neuen Fenster ausführt. Aber ich möchte es im ersten vorhandenen Fenster ausführen. Wie kann ich das tun?

+0

Halten Sie einen Verweis auf das Fenster 'Player1' in' Player2'. –

+0

Ehm, wie soll ich das machen? – Cortana

+0

Übergeben Sie es an Ihr 'Player2'-Fenster. Erstelle einen Konstruktor mit einem Parameter vom Typ 'Player1'. –

Antwort

1

Sie haben mehr Optionen, wie Sie das tun. Einer wird in diesem Link erklärt: link

Andere ist Verweis von übergeordneten Fenstern auf das untergeordnete Fenster übergeben.

Sie definieren Eigenschaft Player1 in Player2 Fenster wie:

public class Player2 { 
    public Player1 Parent {private set;get} 

    public Player2(Player1 parent) { 
     this.Parent = parent; 
    } 

    public void MyMethod() { 
     Parent.CustomMethodCall(); 
    } 
} 

Sie Player2 Objekt in Player1 Fenster erstellen wie:

var win = new Player2(this); 
win.ShowDialog(); 
+0

Vielen Dank! Das verlinkte funktionierte gut. Aber deine Code-Lösung hat bei mir nicht funktioniert. – Cortana

0

Was ich tun würde, ist Ereignisse zu verwenden, aus dem Hauptfenster zu kommunizieren Unterfenster. Und Methoden in den Unterfenstern, um das Hauptfenster zu hören.

Sie haben Ihr PlayerWindow wie, wo Sie einige Ereignisse aussetzen. Ich aded auch ein Verfahren zur Kommunikation in der anderen Richtung (Hauptfenster -> Player-Fenster)

public class PlayerWindow : window 
{ 
    public event EventHandler UserClickedButton; 

    //Here the function you call when the user click's a button 
    OnClick() 
    { 
     //if someone is listening to the event, call it 
     if(UserClickedButton != null) 
      UserClieckedButton(this, EventArgs.Empty); 
    } 

    public void ShowSomeStuff(string stuff) 
    { 
     MyLabel.Content = stuff; 
    } 
} 

Dann Sie Ihr Hauptfenster haben, dass die beiden Fenster (eine für jeden Spieler) erstellt und hören für die Ereignisse

public class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     //we create the first window 
     PlayerWindow w1 = new PlayerWindow(); 
     //hook to the event 
     w1.UserClickedButton += Player1Clicked; 

     //same for player 2 
     PlayerWindow w2 = new PlayerWindow(); 
     w2.UserClickedButton += Player2Clicked; 

     //open the created windows 
     w1.Show(); 
     w2.Show(); 
    } 

    private void Player2Clicked(object sender, EventArgs e) 
    { 
     //Here your code when player 2 clicks. 
     w1.ShowSomeStuff("The other player clicked!"); 
    } 

    private void Player2Clicked(object sender, EventArgs e) 
    { 
     //Here your code when player 1 clicks. 
     w2.ShowSomeStuff("The player 1 clicked!"); 
    } 
}