55 votes

Retourner un objet depuis une fenêtre popup

J'ai une fenêtre qui fait apparaître une autre fenêtre. Je veux que la deuxième fenêtre puisse renvoyer un objet à la première fenêtre lorsqu'on appuie sur un bouton. Comment dois-je m'y prendre ?

64voto

Thomas Levesque Points 141081

Vous pouvez exposer une propriété sur la deuxième fenêtre, afin que la première fenêtre puisse la récupérer.

public class Window1 : Window
{
    ...

    private void btnPromptFoo_Click(object sender, RoutedEventArgs e)
    {
        var w = new Window2();
        if (w.ShowDialog() == true)
        {
            string foo = w.Foo;
            ...
        }
    }
}

public class Window2 : Window
{
    ...

    public string Foo
    {
        get { return txtFoo.Text; }
    }

}

27voto

Robert Rossney Points 43767

Si vous ne voulez pas exposer une propriété, et que vous voulez rendre son utilisation un peu plus explicite, vous pouvez surcharger la fonction ShowDialog :

public DialogResult ShowDialog(out MyObject result)
{
   DialogResult dr = ShowDialog();
   result = (dr == DialogResult.Cancel) 
      ? null 
      : MyObjectInstance;
   return dr;
}

6voto

Versatile Points 396

Sainte mère de Mars, ça m'a pris une éternité à comprendre :

FENÊTRE 1 :

if ((bool)window.ShowDialog() == true)
{
   Window2 content = window.Content as Window2;
   string result = content.result;
   int i = 0;
}

FENÊTRE 2 :

public partial class Window2 : UserControl
{
    public string result
    {
        get { return resultTextBox.Text; }
    }

    public Window2()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Window.GetWindow(this).DialogResult = true;
        Window.GetWindow(this).Close();
    }
}

XAML :

<Button IsDefault="True" ... />

0voto

Pureon Points 1

Je l'ai fait comme ça.

Dans la fenêtre parent, créez un événement de fermeture correspondant comme ceci :

private void NewWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        NewWindow nw = (NewWindow)sender;

        object Receiver = nw.Sender;
    }

...et dans la fenêtre enfant, changez votre code pour implémenter le "sender" comme ceci :

    public partial class NewWindow : Window
{
    public object Sender { get; set; }

    public NewWindow()
    {
        InitializeComponent();

        Sender = objectYouWantToSend;
    }
}

Ainsi, lorsque vous placez des données dans l'objet "Sender" dans la fenêtre enfant, la fermeture de cette fenêtre placera les données dans la variable "Receiver".

J'espère que cela vous aidera.

0voto

Jelly Ama Points 820

Vous pouvez simplement appeler n'importe quelle méthode de la fenêtre popup comme ceci :

int value = 0;
if ((bool)poupWindow.ShowDialog() == true) {
  value = poupWindow.GetValue();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X