Bonjour,
l'énumération Dialog.result retourne des valeurs comme .abort .Ok etc.. j'aimerai pouvoir faire passer de nouvelles valeurs ex : .QuelqueChose
comment puis-je faire pour "surcharger" l'énumération ? est-ce possible ?
Merci d'avance.
Version imprimable
Bonjour,
l'énumération Dialog.result retourne des valeurs comme .abort .Ok etc.. j'aimerai pouvoir faire passer de nouvelles valeurs ex : .QuelqueChose
comment puis-je faire pour "surcharger" l'énumération ? est-ce possible ?
Merci d'avance.
Je sais pas si c possible, mais en tout cas tu peux ajouter facilement une variable dans la classe de ta boite de dialogue, qui te sera accessible après avoir recu un "ok" ou autre chose...
Oui, variable, propriété, méthode, du moment qu'elles sont déclarées Friend ou Public (bref qu'elles sont accessibles) tu pourra les utiliser après avoir fermé ta boite de dialogue (ton formulaire modal). En effet, lorsque tu fermes ton form modal, celui-ci n'est pas détruit et demeure accessible dans ton code.
Pour le détruire réellement tu peux appeler sa méthode Dispose.
Merci pour vos réponses, c'est ce que je fais...
Mais j'aurai aimé pouvoir simplement ajouter des valeurs dialog.result dans l'enumeration et m'en servir normalement. Ce que je ne sais pas comment faire !
Je suppose que je trouverai un jour la soluce en cherchant autre chose !!!
Merci encore
Pour ma part je ne sais pas modifier les enum du framework. En conséquence, je chercherais plutôt à modifier la class du formulaire en réécrivant, surchargeant ou masquant (Overloads, Overrides ou Shadows en VB.NET) la propriété DialogResult afin de lui faire correspondre un Enum personnalisée.
bon bah je marque résolu... J'ai encore du mal à faire la différence entre ce qui peut être ou ne pas être fait.
merci pour vos réponses.
Bonjour,
La méthode que propose Fred est bonne.
j'ai pas testé, mais je pense que ça peut le faire...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 Namespace MonAppli Public Enum DialogResult As Integer [None] = 0 [OK] = 1 [Cancel] = 2 [Abort] = 3 [Retry] = 4 [Ignore] = 5 [Yes] = 6 [No] = 7 [TrucMuch] = 8 End Enum End Namespace Public Class Form1 Inherits System.Windows.Forms.Form '*** On masque la méthode ShowDialog sans paramètre awner Public Shadows Function ShowDialog() As MonAppli.DialogResult ' Appel la méthode ShowDialog avec paramètre owner à nothing Return Me.ShowDialog(Nothing) End Function '*** On masque la méthode ShowDialog avec paramètre owner Public Shadows Function ShowDialog(ByVal owner As Windows.Forms.Form) As MonAppli.DialogResult ' Appel ShowDialog de la classe de base et attend une réponse Select Case MyBase.ShowDialog(owner) ' Réponse None Case DialogResult.None ' On renvoi None Return MonAppli.DialogResult.None ' Réponse OK Case DialogResult.OK ' Je veux renvoyer TrucMuch Si ... if .... Then Return MonAppli.DialogResult.TrucMuch Else Return MonAppli.DialogResult.OK End If ' Réponse Cancel Case DialogResult.Cancel '... End Select End Function End Class Public Class Form2 Inherits System.Windows.Forms.Form ' Affiche la form1 en mode modal Public Sub AfficherForm1() Dim frmForm1 As Form1 ' Nouvelle instance frmForm1 = New Form1 ' Affiche en modal If frmForm1.ShowDialog = MonAppli.DialogResult.TrucMuch Then MsgBox("Voici la réponse TrucMuch !") End If frmForm1.Dispose() End Sub End Class
Merci Kelpan, c'est ce que j'avais fait.
a+
PS : Je sais pas ou est le tag résolu au carré :D
Bonjour,
Comment on fait pour passer ce résultat car dans ma fenetre de dialogue je récupère bien mon résultat surchargé via le enum mais pas dans ma fenetre qui suit.
Je m'explique :
Code dans ma fenetre de dialogue
Me renvoi bien mon id 8, _MsgBoxReturn = 8Code:
1
2
3
4
5 Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_ht.Click _MsgBoxReturn = MsgBoxPerso.DialogResult.HT Me.Close() Return End Sub
Par contre
qui est dans ma forme principal et qui appelle la fenetre de dialogue me recupère l'id 2, theResult = 2Code:Dim theResult As Integer = MsgBox_TVA.ShowDialog()
Bonjour,
Vous appelez votre boîte de dialogue avec la méthode Show ou ShowDialog ?
Si vous remplacez :
Par :Code:_MsgBoxReturn = MsgBoxPerso.DialogResult.HT
Cela change-t-il quelque chose ?Code:Me.DialogResult = MsgBoxPerso.DialogResult.HT
Bonjour,
J'utilise la fonction ShowDialog()
_MsgBoxReturn = MsgBoxPerso.DialogResult.HT => Renvoi bien 8 (bon id dans mon enum)
Me.DialogResult = MsgBoxPerso.DialogResult.HT => Renvoi rien, sort du debug mais pas d'erreur.
Bonjour,
En relisant ce topic je me rend compte que ma précédente réponse était totalement à coté de la plaque. Je vous prie de m'excuser pour avoir mal lu votre question. :roll:
En l'état, il n'est pas possible de passer un autre Integer que ceux prévu dans le enum dialogresult de base. Ce enum ne peux pas être modifié, ni surchargé.
L'astuce consiste donc à masquer la méthode ShowDialog, pour la remplacer par une nouvelle méthode qui fera selon nos désirs. Je reprends le code de Kelpan, qui fournit la solution :
Dans votre formulaire principal, en dehors de la classe de votre formulaire, définissez votre enum personnalisé :
Dans votre formulaire de dialogue, masquez la méthode ShowDialog() :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Namespace MonAppli Public Enum DialogResult As Integer [None] = 0 [OK] = 1 [Cancel] = 2 [Abort] = 3 [Retry] = 4 [Ignore] = 5 [Yes] = 6 [No] = 7 [HT] = 8 [TVA1] = 9 ' etc... End Enum End Namespace Public Class Form1 ' (votre code ici...)
(dans l'exemple ci-dessus il faut cliquer sur le bouton "OK" pour avoir la réponse [HT])Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 '*** On masque la méthode ShowDialog sans paramètre awner Public Shadows Function ShowDialog() As MonAppli.DialogResult ' Appel la méthode ShowDialog avec paramètre owner à nothing Return Me.ShowDialog(Nothing) End Function '*** On masque la méthode ShowDialog avec paramètre owner Public Shadows Function ShowDialog(ByVal owner As Windows.Forms.Form) As MonAppli.DialogResult ' Appel ShowDialog de la classe de base et attend une réponse Select Case MyBase.ShowDialog(owner) ' Réponse None Case DialogResult.None ' On renvoi None Return MonAppli.DialogResult.None ' Réponse OK Case DialogResult.OK Return MonAppli.DialogResult.HT Case Else Return MonAppli.DialogResult.Cancel End Select End Function
Avec ça, plus besoin des méthodes Button_Click (mais veillez à ce que chaque bouton ai sa propriété DialogResult correctement réglée).
Ca devrait produire le résultat escompté.
Bonjour,
On peut rajouter d'autre sortie sans masquer "OK"
'Enum avec les éléments suplémentaires
Déclaration des variables qui nous permettrons de différencier le choix utilisateurCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Namespace MonAppli Public Enum DialogResult As Integer [None] = 0 [OK] = 1 [Cancel] = 2 [Abort] = 3 [Retry] = 4 [Ignore] = 5 [Yes] = 6 [No] = 7 [TrucMuch] = 8 [HT] = 9 [TVA1] = 10 [TVA2] = 11 '... End Enum End Namespace
Les nouveaux boutons (trucmuch, ht, tva1, tva2,...) doivent avoir leurs propriétés DialogResult sur "OK". (sinon ne fonctionne pas)Code:
1
2
3
4
5
6
7
8 Public Class frmDialogPerso Inherits System.Windows.Forms.Form Private bTruc As Boolean = False Private bHT As Boolean = False Private bTVA1 As Boolean = False Private bTVA2 As Boolean = False '...
La réaction aux événements clic des boutons qui déterminera lequel est validé et déclenchera le OK.
Traitement. Si bouton OK détermine quel bouton est l'initiateur et renvoi la valeur voulue (coorespondant au bouton réellement cliqué)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Private Sub btnTruc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTruc.Click bTruc = True btnOk_Click(sender, e) End Sub Private Sub btnHT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHT.Click bHT = True btnOk_Click(sender, e) End Sub Private Sub btnTVA1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTVA1.Click bTVA1 = True btnOk_Click(sender, e) End Sub Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click ' doit être présent sinon erreur End Sub
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 '*** On masque la méthode ShowDialog avec paramètre owner Public Shadows Function ShowDialog(ByVal owner As Windows.Forms.Form) As MonAppli.DialogResult ' Appel ShowDialog de la classe de base et attend une réponse Select Case MyBase.ShowDialog(owner) ' Réponse None Case DialogResult.None Return MonAppli.DialogResult.None ' On renvoi None ' Réponse OK qui permet de rajouter tous les nouveaux choix Case DialogResult.OK If bTruc Then ' Je veux renvoyer TrucMuch Return MonAppli.DialogResult.TrucMuch ElseIf bHT Then ' HT Return MonAppli.DialogResult.HT ElseIf bTVA1 Then ' TVA1 Return MonAppli.DialogResult.TVA1 ElseIf bTVA2 Then Return MonAppli.DialogResult.TVA2 ' autres cas rajouté, Etc... '... Else Return MonAppli.DialogResult.OK End If ' Réponse Cancel Case DialogResult.Cancel Return MonAppli.DialogResult.Cancel '[Abort] = 3 '[Retry] = 4 '[Ignore] = 5 '[Yes] = 6 '[No] = 7 End Select Return MonAppli.DialogResult.Cancel End Function
Exemple d'appel
A+, Hervé.Code:
1
2
3
4
5
6 Dim fenDP As frmDialogPerso fenDP = New frmDialogPerso If fenDP.ShowDialog = MonAppli.DialogResult.TrucMuch Then MsgBox("Voici la réponse TrucMuch !") End If fenDP.Dispose()