2010-08-04 9 views
0

Je suis toujours coincé.Comment créer un contrôle et gérer ses événements en une seule méthode?

Supposons que j'ai un contrôle utilisateur avec un bouton. Et un événement appelé damnIt_ButtonClicked. Dans la fenêtre principale, je veux émuler la durée de vie du contrôle comme si c'était un dialogue modal, mais ce n'est pas le cas.

Je veux tout envelopper dans une méthode, il renvoie vrai si le bouton sur le contrôle cliqué.

public bool Show() { 

     var control = new ControlWithSingleButton(); 
     bool result; 

     control.damnIt_ButtonClicked += (object sender, EventArgs args) => 
     { 
      result = true; 
     }; 

     MainWindowGrid.Children.Add(control); 
     MainWindowGrid.Visibility = Visibility.Visible; 


     return result; 
    } 

Maintenant. Comme vous voyez le problème est cette méthode retournera toujours faux; Mais je dois retourner un résultat uniquement lorsque l'événement damnIt_ButtonClicked se déclenche. Cela signifie que je dois mettre le thread en attente, jusqu'à ce que l'utilisateur clique sur le bouton. Pas vrai? Ou comment cela devrait être fait. Aidez-moi s'il vous plaît ....

Répondre

0

Vous savez quoi? J'abandonne!

J'ai décidé de faire le contrôle d'une fenêtre, bien qu'il soit strictement interdit dans les spécifications données d'utiliser d'autres fenêtres que le Main. Quoi qu'il en soit, ça va être une fenêtre transparente, sans bordure et sans chrome, donc personne ne peut voir la différence.

Merci beaucoup.

+0

Nice - beaucoup mieux que ce que les hacks auraient été nécessaires pour le faire fonctionner dans l'autre sens. – Justin

0

Vous devrez réorganiser votre solution. Sans connaître une portée plus large de ce que vous essayez de faire, voici une solution possible.

private bool buttonResult; 

public void Show() { 

    var control = new ControlWithSingleButton(); 
    bool result; 

    control.damnIt_ButtonClicked += (object sender, EventArgs args) => 
    { 
     this.ProcessButtonClick(); 
    }; 

    MainWindowGrid.Children.Add(control); 
    MainWindowGrid.Visibility = Visibility.Visible; 

    } 

private void ProcessButtonClick() 
{ 
    this.buttonResult = true; 
    //do whatever you would have before if Show had returned true 
} 
+0

Mais je dois retourner le résultat dans la méthode Show(). – Agzam

+0

# 1 besoin de créer un contrôle et l'injecter dans la grille # 2 attendre jusqu'à ce que l'utilisateur clique sur le bouton # 3 renvoie un résultat. J'ai un problème aveC# 2 – Agzam

+0

Je suis en train d'essayer de créer "boîte de dialogue modale plat". Bien que techniquement ça ne soit pas un dialogue du tout. C'est juste un contrôle d'utilisateur avec un bouton que je vais placer dans la grille de MainWindow. J'ai juste besoin d'une méthode que je vais pouvoir appeler et elle retournera le résultat - soit l'utilisateur a cliqué sur le bouton ou pas ... – Agzam