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 :

charger une fenêtre et la voir à l'ecran


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut charger une fenêtre et la voir à l'ecran
    Bonjour,

    J'ai crée une classe thesaurus_form, dont je crée une instance dans le main .
    Il se trouve que dans le main il faut également que j'appelle la méthode ShowDialog pour pouvoir voir cette fenêtre.
    Cependant, il existe une méthode Load qui s'execute automatiquement une fois une instance de cette classe créee.
    Quelle est la différence entre la méthode Load et la méthode ShowDialog
    Je pensais que la méthode Load permettait de voir à l'ecran l'instance de la classe nouvellement créée.
    Qu'en est il exactement?

    Par ailleurs, je constate que si dans la méthode main de la classe thesaurus_form j'utilise la méthode Show et pas la méthode Show Dialog, l'instance de la classe créée n'apparaît pas à l'écran.

    Pouvez vous me dire pourquoi?

    Je vous en remercie infiniment.

    Cordialement.
    Nathalie

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    t'as pas l'air d'avoir bien compris le concept ...

    un form n'a pas de méthode load

    elle a un évènement load, une méthode protected overridable onload et éventuellement une sub que son nom nous indiffère qui est handlé par l'évènement load

    et avoir ouvert 3 posts pour le meme point que tu ne comprends pas ...

    j'espère qu'avec mes 2 autres réponses tu aurais tous les éléments de réponse
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut evènement load et méthode show dialog
    Bonsoir et merci pour tes réponses.

    Tu me dis que la class Form a un evènement load; pour ma part avec ce que je sais de l'héritage en Java, une classe fille hérite des méthodes et propriétés de la classe supérieure.
    Donc pour moi, si je vois ecrit MyBase.Load, j'en conclus que Load est une méthode de la classe Form.
    Tu me dis que non,qu'il ne s'agit pas d'une méthode de la classe Form.
    D'accord, alors comment çà marche exactement en vbnet.
    J'aiemrais bien que les choises soient claires.

    Par ailleurs, tu ne m'as pas expliqué en quoi l'évènement Load est différent de l'appel de la méthode showdialog .
    Je pensais qu'il correspond au fait de pouvoir voir la fenêtre en cours(charger signifie voir à l'écran pour moi, mais je me trompe peut être et aimerais ne plus me tromper).

    Par ailleurs, poiurquoi est iol indispensable d'appeler la méthode showdialog dans la méthode main, pour pouvoir voir l'instance de la clase thesaurus form créée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Public Shared Sub Main()
    thesaurus_form2= New thesaurus_form()
    thesaurus_form2.ShowDialog()
    End Sub
    Merci encore à toi, de ton aide.

    Cordialement.
    Nathalie

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    handles signifie que tu veux ratacher un évènement à une sub


    public sub toto () handles mybase.load


    =>
    toto est le nom de la sub, load est un evenement (donc pas une méthode) qui se trouve sur mybase (il se trouve aussi sur me vu qu'on hérite de tout)

    les évènements n'ont rien à voir avec l'héritage, simplement il est possible de s'abonner à un évènement de soit meme ...
    un évènement c'est simplement que plusieurs subs peuvent s'attacher à des évènements de certaines instances pour être appelées à ce moment là (évènements shared possibles aussi !)


    pour redéfinir un membre de la hiérarchie d'héritage c'est le clé overrides qui est utilisé



    .Show sur une form l'affiche à l'écran
    .ShowDialog sur une form l'affiche à l'écran de manière modale, c'est à dire qu'elle bloque toutes les autres fenetres de l'appli tant qu'elle n'est pas fermée (saisie obligatoire ...)

    donc .Show devrait suffire dans ton cas
    mais si tu veux qu'au démarrage de ton appli, ca soit telle fenetre qui s'ouvre, ne t'embete pas à écrire du code, dis le dans les propriétés du projet, ca génèrera du code qui le fait
    (à priori dans le startup de l'appli ca lance un run sur la boucle des messages pour le form)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut methode et evènement en vb.net
    Bnsoir et merci beaucoup de ta réponse.
    Je constate donc que j'ai un problème de compréhension au niveau de Handles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public sub toto () handles mybase.load
    Il s'agit donc de rattacher un evènement à une SUB.
    Très bien.
    Lorsque tu me dis ceci

    load est un evenement (donc pas une méthode) qui se trouve sur mybase (il se trouve aussi sur me vu qu'on hérite de tout)

    les évènements n'ont rien à voir avec l'héritage, simplement il est possible de s'abonner à un évènement de soit meme ...
    Que veut dire "load est un evenement (donc pas une méthode) qui se trouve sur mybase "?
    Que veux tu dire par "se trouver sur myBase".
    Si tu confirmes qu'il ne s'agit pas d'une méthode héritée de la classe form qui est la classe mère de "thesaurus_form1 " alors pourquoi utliser MyBase.Load, ce qui porte à confusion.
    Pourquoi ne pas écrire me.Load?
    pour ce qui edt de overrides , peux tu m'indiquer un lien pour comprendre ce concept.
    Overrides est l'équivalent de quoi en java, s'il est possible de faire le parrallèle?

    Sinon, en quoi l'évènement load est il différent de l'appel de la méthode ShowDialog.
    Ne consiste til pas dans le fait de voir à l'écran la form thesaurus_form2, tout comme la méthode ShowDialog le permet.
    Merci de ta réponse sur ce point, car j'ai besoin d'explication sur ce sujet.

    Je constate que quand je demande l'affichage de la fenêtre thesaurus_form2 par l'appel de la méthode showDialog, immédiatement la procédure evènementielle thesaurus_form_load est executée.
    Quel est le lien exact entre cette méthode et cette procédure executée après le chargement de la fenêtre

    Merci beaucoup encore à toi.

    Cordialement.


    Nathalie

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    explication des évènements :

    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
     
    Public Class A
        Public Event texte_changed(ByVal sender As A, ByVal newvalue As String)
     
     
        Private _texte As String
        Public Property texte() As String
            Get
                Return _texte
            End Get
            Set(ByVal value As String)
                _texte = value
                RaiseEvent texte_changed(Me, value)
            End Set
        End Property
     
    End Class
    une classe quelconque A qui quand sa propriété texte change, lance un évènement pour le dire
    le paramètre sender As A permet de préciser quelle instance déclenche l'évènement


    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
     
    Public Class Form1
        Inherits Form
     
     
        Private WithEvents _A1 As New A
        Private WithEvents _A2 As New A
     
        Public Sub A_Texte_Changed(ByVal a As A, ByVal nouvelle_valeur As String) Handles _A1.texte_changed, _A2.texte_changed
             If a Is _A1 then
                 msgbox ("le texte de _A1 vient d'etre modifié")
             End If
             If a Is _A2 then
                 msgbox ("le texte de _A2 vient d'etre modifié")
             End If
        End Sub
     
    End Class
    ici une form, qui a 2 instance de la classe A
    le sub A_Texte_Changed est appelé quand le texte de _A1 ou _A2 change


    WithEvents permet de pouvoir utiliser le mot clé handles
    si tu ne mets pas withevents, il reste possible d'accrocher des évènements par code avec addhandler (et removehandler pour les retirer)


    quand tu fais une form, tous les controles que tu poses dessus sont transformés en code, il est possible de voir ce code en affichant les fichiers cachés du projet, il y a un fichier .designer qui contient par exemple pour un bouton posé
    protected withevents button1 as button
    la sub initializecomponent contient l'initialisation des controles et les modifications des propriétés
    button1 = new button
    button1.left = tant
    button1.top = tant
    me.controls.add(button1)

    donc jette un oeil sur ce type de fichier, tu comprendras certaines choses au passage



    l'évènement load est déclenché quand le chargement de la fenetre est terminé
    donc après un show ou un showdialog
    mais si tu appelles plusieurs fois show sur la meme fenetre, load n'est déclenché que lors du premier appel, car pour les autres appels, show ne fait qu'afficher la fenetre, mais elle était déjà charger


    le framework est développé en grande partie à partir du framework !
    .net est décompilable, le logiciel reflector permet de voir le code source d'un exe ou d'une dll .net et donc permet de voir le code source du framework
    donc on peut voir comment fonctionne la classe form, on peut aussi voir le raiseevent load() dans le code
    reflector devient vite un outil indispensable, il permet de comprendre des choses et de trouver facilement des classes, c'est un moyen de recherche complémentaire à msdn



    explication des overrides :

    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
     
    Public Class A
     
        Public Overridable Sub AfficheMessage()
            MsgBox("Message A")
        End Sub
     
    End Class
     
     
    Public Class B
        Inherits A
     
        Public Overrides Sub AfficheMessage()
            MsgBox("Message B")
        End Sub
     
    End Class
     
     
    Public Class C
        Inherits A
     
        Public Overrides Sub AfficheMessage()
            MyBase.AfficheMessage()
            MsgBox("Message B")
        End Sub
     
    End Class
    ici les classes B et C héritent de A
    si tu instancies un A (dim a as new A) et que tu appelles AfficheMessage tu verras message A
    si tu instancies un B tu verras message B en appelant la meme méthode
    et sur la classe C tu verras message A puis message B
    mybase permet d'appeler la méthode de base



    pour en revenir au handles mybase.load, c'est visual studio qui l'écrit mais handles me.load fonctionne tout aussi, car les évènements s'héritent aussi
    microsoft a dans la plupart des cas fait une méthode protected overridable OnEvent qui raise l'event
    pour l'évènement load, il y a une méthode OnLoad etc...
    et au moment du chargement, le code ne raise pas l'évent, il appelle la méthode OnLoad qui lui raise l'event

    donc à la place d'une méthode qui est handlée par mybase.load (ou me.load)
    il est possible de faire une méthode overrides OnLoad
    et en général il faut laisser le mybase.OnLoad car s'il y avait du traitement il souvent nécessaire


    et pourquoi fais tu du vb.net et pas du c# ? le c#a été inventé pour attiré les développeurs java et c en ayant une syntaxe similaire ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Ecran courant pour une fenêtre
    Par Vonziz dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 20/11/2009, 11h10
  2. Charger un UserControl dans une fenêtre indépendante
    Par Krustig dans le forum Windows Presentation Foundation
    Réponses: 16
    Dernier message: 03/06/2009, 11h36
  3. Lancer une commande dos sans voir la fenêtre
    Par Nicopelo dans le forum Windows
    Réponses: 2
    Dernier message: 07/06/2007, 09h12
  4. Charger une fenêtre grand écran
    Par trecks dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/01/2007, 10h42
  5. Réponses: 20
    Dernier message: 10/05/2006, 11h26

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