Je suis en WPF.
J'ai une class principale avec juste un bouton et j'ai un usercontrol avec juste une textbox.
Dans la class principale j'utilise naturellement l'événement click du bouton et je voudrais qu'a ce moment ca dit a un autre événement que le clique a lieu et que ce second événement provoque l'affichage d'un text dans la textbox, text défini dans la class principale. Il faut donc passer un parametre (le string qui sera affiche) et qu'il arrive dans la textbox du usercontrol.
Voici mon code :
Class principale :
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public delegate void EditMarketingBoxItem(object sender, EventArgs e);
public event EditMarketingBoxItem Edit = null;
private void Button_Click(object sender, RoutedEventArgs e)
{
if (Edit != null)
Edit(this, new UserControl1("Ok"));
}
}
Class du usercontrol :
public partial class UserControl1 : UserControl
{
public UserControl1( )
{
InitializeComponent();
MainWindow main = new MainWindow();
main.Edit += main_Edit;
}
void main_Edit(object sender, EventArgs e)
{
textblock.Text = "Ok";
}
}
Malheureusement j'ai une boucle infini sur le constructeur du usercontrol et mon application plante. Je doute meme que la base du code est juste.
Pouvez vous m'aider ?
J'ai deja essaye de comprendre les evenements a travers plus de 5 tuto mais impossible pour moi de creer moi meme un evenement personnalise qui envoie quelque chose dans une autre class. Si on m'aide a faire fonctionner ce programme je pense comprendre car j'ai imaginé le fonctionnement moi meme.
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 26 févr. 2015 à 18:57
public UserControl1( )
{
...
MainWindow main = new MainWindow();
...
}
Si ton UserControl est contenu (directement ou non) dans MainWindow, c'est normal.
Tu créé MainWindow qui créé UserControl1 qui créé MainWindow, qui créé ...
Essayes de mettre une variable booléenne qui si à true bloque l'execution du gestionnaire d'événement (if (...) return; )
Je n'ai plus la boucle infini, le usercontrol est bien ajoute dans la grille mais private void main_Edit(string message) n'est jamais executé du coup le texte ne change jamais.
Pouvez vous m'aider ? Merci d'avance
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 27 févr. 2015 à 14:33
Normal, tu recréé une fenêtre au lieu de t'abonner ? celle déj? présente, regardes du c?té du Design Pattern Singleton pour t'inspirer de la
méthode.
En faite ça n'a pas été si difficile que ça :)
Il suffit de bien se concentrer au calme et d'étudier quelques tutos et exemples et il est facile de comprendre les événements.
Merci d'avoir trouvé l'origine de la boucle infinie.