2017-01-19 2 views
1

J'ai créé un bouton sur un formulaire pour lequel j'ai défini une valeur de retour par programme, voir ci-dessous. Tout d'abord, est le gestionnaire d'événements psudocode, suivi de l'endroit où le résultat de la boîte de dialogue est retourné.Résultat de la boîte de dialogue Définir la valeur de retour

Il existe une propriété par défaut dans laquelle vous pouvez définir le comportement de retour d'un bouton dans l'interface utilisateur, c'est-à-dire le comportement Résultat de la boîte de dialogue. Dans mon code complet, je ne vois pas où le retour de ce bouton est défini ou modifié. Lorsque vous testez (en mode débogage) la première fois que le gestionnaire d'événements buttonSaveSet_Click est utilisé pendant l'exécution du code, la valeur du résultat de la boîte de dialogue retournée est "Annuler" malgré le fait que j'ai cliqué sur le bouton "Définir". Cependant, la deuxième fois que j'exécute la fonction, en appuyant sur le même bouton, le résultat de la boîte de dialogue est renvoyé comme "Oui".

Il semble qu'il y ait un autre endroit où le résultat de la boîte de dialogue est en cours de modification, et je place cette valeur à l'emplacement incorrect.

psudo code 
    private void buttonSaveSet_Click(object sender , EventArgs e) 
    { 
     setChars = new setChars(); 
     //set the dr to yes. 
     buttonSaveSet.DialogResult = DialogResult.Yes; 

     // set the charCount 
     // set the rowCount 

     if (conditional statement is true) 
     { 
      //return values; 
     } 

     else 
     { 
      //return nothing; 
     } 
     Close(); 
    } 

lieu de retour:

   try 
     { 
      DialogResult dResult = setValPopup.ShowDialog(); 
      SetChars sc = setValPopup.setChars; 
      int max; 

      if (dResult == DialogResult.Yes) 
      { 
       if (sc.set == true) 
       { 
        //do other work 
       } 
      } 
     } 
+0

Les boutons DialogResult sont copiés dans form.DialogResult avant que OnClick ne soit exécuté après. Le changer dans l'événement avant de fermer le formulaire est trop tard. Essayez de définir form.DialogResult not button.DialogResult. – Ralf

Répondre

0

Vous devez définir la propriété DialogResult du formulaire pour quitter. Toute valeur mais DialogResult.None forceront le formulaire pour fermer et retourner tout ce que vous définissez comme DialogResult (sur la forme, et non sur le bouton)

private void buttonSaveSet_Click(object sender , EventArgs e) 
{ 
    setChars = new setChars(); 
    this.DialogResult = DialogResult.Yes; 
    .... 
    // No need to call Close here 
    // Close(); 
} 

Le comportement que vous observez est dû au fait que probablement le moteur de forme examine la propriété DialogResult du bouton avant d'entrer dans l'événement click et il ne devrait pas le réévaluer à la sortie de l'événement. Ainsi, votre premier clic définit la propriété sur le bouton, au second clic la propriété sur le bouton est notée par le moteur de formulaire et tout se ferme.

+0

Steve, c'est ce qu'il a fait. Merci pour l'aide. J'ai fini par enlever la méthode close() et le résultat renvoyé est "Oui" comme je m'y attendais. C'est une chose que je soupçonnais, la fermeture de formulaire avant que le changement de valeur ait été enregistré, mais je n'y ai pas beaucoup ajouté. – WholeMilk32

0

Basé sur le comportement que vous décrivant des. Il est probable que vous ayez défini la propriété DialogResult sur votre concepteur. Ainsi, la première fois qu'il s'exécute, il exécute la valeur définie sur le concepteur et, lors des exécutions suivantes, il s'exécute correctement.

Regardez votre concepteur et vous trouverez le problème.

+0

C'est ce que j'ai d'abord pensé aussi. J'ai regardé dans le concepteur je n'ai rien trouvé qui pourrait modifier le résultat. Lorsque j'ai utilisé l'interface utilisateur pour définir la valeur de retour, une ligne de code a été ajoutée "this.buttonSaveSet.DialogResult = System.Windows.Forms.DialogResult.Yes;" cela a modifié le résultat du dialogue. Peut-être que c'est ce que tu voulais dire? Merci pour la réponse si! J'apprécie l'aide. – WholeMilk32