IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[2.0][VB.NET] Comment ajouter de nouvelles valeurs à dialog.result ?


Sujet :

VB.NET

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 111
    Points : 89
    Points
    89
    Par défaut [2.0][VB.NET] Comment ajouter de nouvelles valeurs à dialog.result ?
    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.

  2. #2
    Membre régulier

    Inscrit en
    Décembre 2004
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 85
    Points : 104
    Points
    104
    Par défaut
    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...

  3. #3
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    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.

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 111
    Points : 89
    Points
    89
    Par défaut
    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

  5. #5
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    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.

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 111
    Points : 89
    Points
    89
    Par défaut
    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.

  7. #7
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Bonjour,

    La méthode que propose Fred est bonne.


    j'ai pas testé, mais je pense que ça peut le faire...

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 111
    Points : 89
    Points
    89
    Par défaut
    Merci Kelpan, c'est ce que j'avais fait.

    a+

    PS : Je sais pas ou est le tag résolu au carré

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 161
    Points : 86
    Points
    86
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Me renvoi bien mon id 8, _MsgBoxReturn = 8

    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim theResult As Integer = MsgBox_TVA.ShowDialog()
    qui est dans ma forme principal et qui appelle la fenetre de dialogue me recupère l'id 2, theResult = 2

  10. #10
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Bonjour,

    Vous appelez votre boîte de dialogue avec la méthode Show ou ShowDialog ?

    Si vous remplacez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _MsgBoxReturn = MsgBoxPerso.DialogResult.HT
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DialogResult = MsgBoxPerso.DialogResult.HT
    Cela change-t-il quelque chose ?

  11. #11
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 161
    Points : 86
    Points
    86
    Par défaut
    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.

  12. #12
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    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.

    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é :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 votre formulaire de dialogue, masquez la méthode ShowDialog() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    (dans l'exemple ci-dessus il faut cliquer sur le bouton "OK" pour avoir la réponse [HT])

    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é.

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    On peut rajouter d'autre sortie sans masquer "OK"
    'Enum avec les éléments suplémentaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Déclaration des variables qui nous permettrons de différencier le choix utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        '...
    Les nouveaux boutons (trucmuch, ht, tva1, tva2,...) doivent avoir leurs propriétés DialogResult sur "OK". (sinon ne fonctionne pas)

    La réaction aux événements clic des boutons qui déterminera lequel est validé et déclenchera le OK.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Traitement. Si bouton OK détermine quel bouton est l'initiateur et renvoi la valeur voulue (coorespondant au bouton réellement cliqué)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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()
    A+, Hervé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/07/2006, 13h09
  2. [Plateforme.NET]Comment ajouter un autre langage ?
    Par reggae dans le forum Framework .NET
    Réponses: 4
    Dernier message: 14/12/2005, 21h16
  3. [VB.NEt] comment ajoute-t-on un datagrid à un projet ?
    Par callo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/12/2005, 18h25
  4. [ADO.Net][VB.NET] Comment ajouter une colonne Integer à un DataTable ?
    Par graphicsxp dans le forum Accès aux données
    Réponses: 2
    Dernier message: 20/04/2005, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo