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 ?
Réponses
Trop de publicités?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; }
}
}
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;
}
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" ... />
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.