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 :

Comportement de Show() et de ShowDialog() [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut Comportement de Show() et de ShowDialog()
    Bonjour, je suis toujours à essayer de comprendre VB en utilisant Visual Basic 2010 Express.
    Je démarre l'application à partir d'un module, je crée une classe Form1, je l'instancie dans le module (voir le code qui suit) pas de problème.

    Mais, quand j'ajoute des contrôles dans Form1.vb[Design] (un Label et un PictureBox), ils n'apparaissent pas avec Show() et l'application s'arrête au bout de 3s (voir toujours le code) alors que si je mets ShowDialog() ils apparaissent mais l'application ne se referme plus au bout des 3s.

    J'ai bien repéré la différence entre fenêtre non modale - Show() et modale - ShowDialog(), je ne vois pas le rapport avec l'absence d'affichage des contrôles.

    Voici le code du module principal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Module Module1
        Sub main()
            Dim Fenetre As New Form1
     
            Fenetre.ShowDialog()
            System.Threading.Thread.Sleep(3000)
        End Sub
    End Module
    Ainsi que celui de la Class Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Class Form1
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Me.Text = "Fenêtre"
            Me.Height = 300
            Me.Width = 300
         End Sub
    End Class
    J'espère avoir été clair.
    Merci de me guider dans ce labyrinthe qu'est pour moi VB.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,
    Question peut-être stupide mais pourquoi faire une application console si c'est pour afficher une fenêtre ? Autant faire une application Windows Forms non ?
    Maintenant il faut savoir que ShowDialog() est bloquant. La suite du traitement ne s'exécute qu'après fermeture de la form. La méthode show() elle n'est pas bloquante donc le traitement continue et ... se termine.

    eb.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    comme dit précédemment, utilisez application.run(leform) (bloquant comme showdialog) qui est prévu pour lancer la fenetre d'une appli depuis un sub main

    si vous voulez fermer l'appli au bout de 3 secondes, posez un timer sur le form et mettez me.dispose dans l'event tick du timer (en ayant réglé l'interval à 3000ms)


    quand on dit que showdialog est bloquant ca veut dire qu'avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Fenetre.ShowDialog()
    System.Threading.Thread.Sleep(3000)
    le sleep ne sera exécutée qu'une fois la fenêtre fermée, l'exécution de ce thread est bloquée sur la ligne showdialog
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut
    Question peut-être stupide mais pourquoi faire une application console si c'est pour afficher une fenêtre ? Autant faire une application Windows Forms non ?
    Pour répondre à ebastien cette application sert juste à mieux comprendre le fonctionnement de VB. C'est plus facile de cerner un problème sur 5 lignes de code que sur 50.

    Merci pour vos réponses concernant ShowDialog(), ok, c'est lui qui bloque le Sleep (utilisé par facilité). Mais savez-vous pourquoi les contrôles n'apparaissent pas avec Show() ?
    Il me semble que c'est lié au fait d'utiliser un module "principal" avec Sub Main(), j'ai envisagé de déclarer -instancier- les contrôles comme pour la fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub main()
            Dim Fenetre As New Form1
    or ils apparaissent avec ShowDialog(), ce n'est donc pas ça.
    Merci de me consacrer encore un peu de votre temps.
    Salutations

  5. #5
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut
    Bonjour, j'ai fini par trouver une solution pour faire apparaître un contrôle récalcitrant (j'en ignore toujours la raison)
    Pour l'exemple le contrôle est ici un Label auquel j'applique la méthode Refresh(), ce qui donne le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Fenetre.Show()
            Fenetre.Label1.Refresh()
    En espérant que ça ne crée pas d'autres problèmes.
    Salutations

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    ca reste du bricolage, normalement cette méthode n'est pas nécessaire

    après si tu ne veux pas essayer ce que je dis continue de bricoler ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut
    Bonjour Pol63,
    si tu ne veux pas essayer ce que je dis continue de bricoler
    Application.run(leform) permet certes de démarrer par un Sub Main mais, finalement, si j'ai bien compris, revient à démarrer (par code) sur le Form1. Je souhaite démarrer comme avec un Splashscreen pour charger des fichiers. Je garde ta proposition en mémoire pour l'exploiter si le procédé que je développe actuellement ne me satisfait pas ou pour un autre projet.

    A bientôt, je compte sur tes conseils qui me seront utiles pour mieux comprendre VB, même s'ils ne correspondent pas aux buts que je me suis fixé pour mon projet.
    Salutations

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

Discussions similaires

  1. [XL-2007] comportement différent de Show entre Sub et Function
    Par vieux_syndique dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/08/2009, 06h42
  2. Form: showdialog, show and focus
    Par mourbare dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/09/2008, 09h46
  3. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  4. Réponses: 2
    Dernier message: 22/09/2003, 11h23
  5. Un tuto pour direct show
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 11
    Dernier message: 04/04/2003, 21h28

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