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 :

"Forcer" la fermeture de l'application


Sujet :

VB.NET

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut "Forcer" la fermeture de l'application
    Bonjour,

    Mon projet est de type Windows Form.
    Au lancement, il ouvre Form1 ce qui déclenche l'événement Form1_Load.

    Jusqu'ici, je m'en étais tiré en y consignant tout mon code d'initialisation.
    Mais j'ai dû rajouter un test sur le chemin d'accès à la base de donnée. Un Dialogbox s'ouvre pour inviter l'utilisateur à renseigner le chemin d'accès. Ce dialogbox est doté d'un bouton "quitter" (si l'utilisateur renonce...)
    S'il clique sur ce bouton, il faudrait que le lancement de l'appli avorte purement et simplement.

    J'ai tenté plusieurs choses comme
    - mettre ma procédure de test dans l'event Form1_load
    - mettre ma procédure de test dans la sub new de la class Form1 juste après le "initializeComponents"
    - faire un Stop, un Application.exit, un form1.close... en cas de clic sur Quitter de ma dialogbox

    Mais quoique je fasse, je n'arrive pas à stopper le code. Concrètement, la procédure Event Load se déroule quoi qu'il arrive après ces instructions.

    Je me doute que je dois mal m'y prendre. Mais je ne trouve pas comment il faudrait faire. Pouvez-vous m'indiquer une piste ?

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Ce qu'il te faut c'est la création d'une Sub Main sur laquelle ton programme serait lancé en 1er. Paramétrage de ton projet.

    Ensuite tu y inclus ta conditionnelle avant même de lancer ton formulaire principal.

    Voilà qui devrait te mettre sur la voie :

    http://www.developpez.net/forums/d13...a/#post7534621

    A+

  3. #3
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    J'ai oublié de dire que j'ai également tenté cette voie mais j'ai abandonné, apparemment un peu hâtivement sans doute. Voici la raison.

    Si j'ai bien compris, je dois transformer mon type d'application en "application console" là où auparavant il était de type "application windows forms"

    J'ai donc mis mon "test" dans une sub Main() elle même dans un "module" classique.

    Mais là, j'ai tout un tas de remarque de Intellisense sur les objets de mon code désignant des formulaires ou des objets de ces formulaires.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Class FormX
    Private Sub bla bla...
    FormY.DialogResult =... 'FormY est souligné : Une référence à un membre non partagé requiert une référence d'objet. 
    FormZ.DTG.CurrentRow... 'FormZ.DTG est souligné : Une référence à un membre non partagé requiert une référence d'objet.
    Je ne sais pas trop comment modifier mon projet pour supprimer ces erreurs et n'ose pas trop me lancer à l'aveugle vu le nombre d'occurences (48 au total, de même nature, sur l'ensemble de mon projet).

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Il ne faut pas modifier ton application de type Windows Forms en type Console !

    Je t'ai fais un projet test pour que tu puisses voir de toi-même :

    http://wallace87000.upd.fr/00-TheMainSub.zip

    A+

  5. #5
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    OK, je n'ai pas réussi à faire tourner ton appli, mais j'ai compris que pour pouvoir spécifier sub Main en démarrage tout en gardant le type "Application Windows Form", il faut que je décoche "Activer l'infrastructure d'application"
    Du coup cela résout mes 48 erreurs.

    J'ai donc crée un sub Main comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Sub Main()
            InitialiseDatabase()
            Dim f As New Form1
            f.Show()
        End Sub
    La ligne 3 a été rajoutée pour forcer la lecture de la sub new de form1 dont le code se résume à initializecomponents() (code écrit par le désigner). En effet, j'ai remarqué que, sinon, l'instruction f.show lance directement l'event form1_load ce qui n'est pas le bon ordre. Je ne me l'explique pas mais disons que c'est la parade que j'ai trouvée.

    Cependant, je fais face à deux nouveaux problèmes donc un bloquant :
    - en cours de code sur l'event form1_load (qui est assez long et passe par de nombreuses fonctions et sub), j'ai remarqué que la sub new de form1 est appelée à nouveau, par exemple suite à une instruction du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim dt as datatable = Form1.datasettypé.dt1
    Je ne me l'explique pas non plus, mais j'ai trouvé une parade (que je ne détaille pas ici)

    - grâce à toutes mes "parades", j'arrive au bout de mon sub main. L'event form1_load permet de conclure l'instruction f.show. Mais là, je m'attends à ce que mon form1 s'ouvre enfin... Mais non ! L'appli s'achève ainsi sur le End de Sub Main.

    As-tu une idée d'où peut venir mon erreur
    -

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    OK, je n'ai pas réussi à faire tourner ton appli
    ???? Bah voyons.....et avec quel EDI tu développes exactement ??

    Version express 2010, 2012 ou VS2010, VS2012 ou autres ?

    NB : ce n'est pas une appli c'est un projet squelette donc ça ne demande rien de particulier sauf que dans la SubMain j'ai mis une conditionnelle si ton OS n'est pas Windows 7 ou 8 alors la fenêtre ne s'affiche pas !
    C'était un exemple pour illustrer ton problème précédemment rencontré.

    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
     
    Imports System.Threading
     
    Friend Class Program
        <STAThread()>
        Public Shared Sub Main(ByVal Args As String())
            Application.EnableVisualStyles()
            Application.SetCompatibleTextRenderingDefault(False)
            If Not My.Computer.Info.OSVersion.StartsWith("6") Then
                Interaction.MsgBox("Only for Windows 7 or Windows 8 !!", MsgBoxStyle.Exclamation, "Invalid OS")
                Application.Exit()
            Else
                Dim instanceCountOne As Boolean = False
                Using mtex As Mutex = New Mutex(True, Application.ProductName, instanceCountOne)
                    If instanceCountOne Then
                        Application.Run(New Form1)
                        mtex.ReleaseMutex()
                    End If
                End Using
            End If
        End Sub
    End Class

  7. #7
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Voilà du sur mesure. A toi d'en faire bon usage :

    http://wallace87000.upd.fr/01-TheMainSub.zip


    A+

  8. #8
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    ???? Bah voyons.....et avec quel EDI tu développes exactement ??
    Je travaille sur VS2010 ultimate.
    J'arrrive bien à charger le projet et à visualiser les composants mais pas à l'exécuter. Voir en PJ le message d'erreur

    Mais je ne pense pas que ce soit pour cela que tu me l'as envoyé. Comme je te le disais, l'essentiel est de voir comment tu as construit ton projet et de ce point de vue, l'objectif est atteint.
    Images attachées Images attachées  

  9. #9
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    J'ai réussi à faire tourner la 2ème version

    J'ai remarqué que, si je simplifie le code de Program de cette façon, ça marche aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      Public Sub Main(ByVal Args As String())
     
     
            Dim instanceCountOne As Boolean = False
     
     
            Dim dlg As New Dialog1
            If dlg.ShowDialog() = DialogResult.OK Then
                Application.Run(New Form1(dlg.TextBox1.Text))
     
            End If
     
        End Sub
    A quoi servent les autres instructions celles que j'ai supprimées ? J'ai cru comprendre qu'elles sont là pour empêcher d'ouvrir plusieurs instances du formulaire mais s'agissant d'une dialogbox, je ne vois pas où est le risque que cela se réalise.

  10. #10
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    OK, pour mon point bloquant, j'ai compris qu'il faut remplacer f.show par Application.Run(f)

    Pour mon pb de sub new lancée intempestivement, je crois avoir trouvé l'origine du pb. En simplifiant mon code, j'ai la structure suivante :

    Dans un module 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Main()
            InitialiseDatabase()
            Application.Run(New Form1)
        End Sub
    Dans le code de Form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Class Form1 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ...
        Call sub1()  
        ...
    End Sub
    avec, dans un module 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub1()
         ... 
         call Sub2(Form1.monDataGridView)
         ...
    End sub
    et dans un module 3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Friend Sub2(ByVal DTG as DataGridView)
    ...
    End Sub
    Lors du call Sub2, l'appli repasse par la Sub New de Form1. Je suppose que c'est dû à un pb de portée de l'instance Form1 mais :
    1°/ Je suis encore novice sur ces notions de public, friend etc...
    2°/ Je n'avais pas ce "défaut" lorsque mon appli démarrait directement par l'ouverture de Form1 (dans les paramètres du projet)

    Peux-tu m'expliquer ce qui ne va pas, et si possible, pourquoi je n'avais pas ce pb avant ?

  11. #11
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    La classe program comme elle est construite corresponds au standard d'une application avec les parametres de projet par defaut :

    - Permet la gestion des styles visuelles de l instance de la fenetre appelee dans la sub main (le cas echeant sa affiche un style comme un Windows classique) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(False)
    - La classe mutex permet l'execution du programme en instance unique et non d'une fenêtre ou de ta dlgbox !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Dim instanceCountOne As Boolean = False
                Using mtex As Mutex = New Mutex(True, Application.ProductName, instanceCountOne)
                    If instanceCountOne Then
                        Application.Run(New Form1)
                        mtex.ReleaseMutex()
                    End If
                End Using
    Si tu reprends ces 2 parametrages tu remarqueras qu'on les retrouve ici mais nous les avons codés manuellement car par necessité tu as due ajouter un point d'entrée d application personnalisé :

    http://imabox.fr/a2/1321102013DVOtxd00.png


    J'espère que c'etait assez clair.

    Bonne journée.

  12. #12
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    J'ai trouvé une solution mais je ne suis pas sûr que ce soit la bonne même si elle marche :
    Je suppose que le new Form1 doit être déclaré en variable publique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      Public f As New Form1
    ' j'ai remarqué que si j'écris Public Form1 As New Form1 ne suffit pas.
    ' Cela m'aurait pourtant évité de remplacer tous les Form1 de mon code existant
     
        Public Sub Main()
            InitialiseDatabase()
            Application.Run(f)
        End Sub
    et dans le module 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub1()
         ... 
         call Sub2(f.monDataGridView)
         ...
    End sub
    Qu'en penses-tu ? Est ce la solution orthodoxe ?

  13. #13
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Je ne saisi pas du tout la structure de ton projet et surtout quelles doivent etre les valeurs de retour....??

    PS1 : on n'utilise plus la methode "Call" c' est obsolète !

    PS2 : si tu veux vraiment que je te donne mon avis MP moi ton projet ce soir et j'y jetterai un oeil en te proposant des ajustements .

  14. #14
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par wallace1 Voir le message

    PS1 : on n'utilise plus la methode "Call" c' est obsolète !
    Rassure-toi dans le vrai code, je n'ai pas mis Call. Je l'ai mis dans mon post pour bien te faire comprendre qu'il s'agit d'une Sub.

    Pour le reste, je te remercie de ta proposition, mais je ne voudrais pas abuser d'autant que je ne suis pas sur un pb bloquant à ce stade. En plus, si je t'envoie mon projet, tu vas déjà mettre du temps à t'y retrouver car il ne correspond sûrement pas aux canons de la programmation même si je fais mon possible pour m'y conformer.

    Je vais donc poursuivre un peu avec la solution que je t'évoquais ci_dessus, et si je rencontre d'autres soucis qui en découlent, je te ferai signe.

  15. #15
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Très bien c'est comme tu le sens.

    Bonne continuation.

  16. #16
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par noftal Voir le message
    OK, je n'ai pas réussi à faire tourner ton appli, mais j'ai compris que pour pouvoir spécifier sub Main en démarrage tout en gardant le type "Application Windows Form", il faut que je décoche "Activer l'infrastructure d'application"
    @wallace1,

    Question toute bête : ceci a pour effet de rendre inactif le champ qui permet de spécifier un écran de démarrage (splashscreen). Du coup, comment spécifier un tel écran quand même ?

  17. #17
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Salut Noftal,

    A partir du moment ou tu coches cette case il te faudra obligatoirement coder tout les paramètres qu'il contient manuellement. Donc oui:

    - ca rends inactif les effets visuels
    - ca rends inactif application a instance unique
    - ca rends inactif le splashscreen
    - ca rends inactif l'enregistrement du MySettings à la fermeture de l'appli


    ...etc....

    Voilà si ça peut te rassurer le splashscreen personnalisé fonctionne à merveille mais là ça serait bien trop compliqué à expliquer surtout si tu comptes gérer un Thread UI sur le splash et récupérer la main dans le formulaire principal de ton application comme ceci :

    http://wallace87000.upd.fr/MetamorphOS.exe

    Il existe des exemples sur le Net pour des splash tout simple (obligatoirement appelé depuis un Sub main !!)!

    A+

  18. #18
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    - ca rends inactif les effets visuels
    @Wallace1

    Ca va faire un peu du réchauffé mais je me heurte à un nouveau soucis.
    Lorsque j'insère un Splitcontainer dans mon form, lors de l'exécution, le splitter n'est plus visible lorsque je le glisse. Je le vois dans sa position initiale et il réapparaît dans sa position finale après le lâcher du bouton de la souris alors que ce contrôle est fait de telle manière que le splitter se grise et se déplace au gré des mouvements de la souris, normalement.
    Autre exemple : lorsque je crée un ListView avec des groups, je vois bien les groupes dans le designer, mais pas lors de l'exécution (comme si j'étais en mode "list")

    comme j'ai remarqué que ce pb est spécifique à mon appli (j'ai testé ces contrôles sur un nouveau projet et je n'y rencontre pas ces pb), je suis remonté dans le temps et j'ai identifié que mon appli a commencé à déconner du point de vue de ces 2 pb, juste après l'avoir modifiée pour tenir compte des préconisations de ce topic : lancement de l'appli par un Sub Main avec désactivation de l'infrastructure d'application dans les paramètres du projet.

    En relisant ce topic, je vois que :

    Citation Envoyé par wallace1 Voir le message
    - ca rends inactif les effets visuels
    Je me demande si tout ne vient pas de là. Qu'en penses-tu ?
    Si tu penses que cela peut être la cause, comment rétablir ces fonctions programmatiquement pour que mon appli fonctionne normalement tout en se lançant à partir d'un sub Main ?

    EDIT : après quelques recherches j'ai trouvé la solution :
    - pour les listview, c'est bien dû à la désactivation des effets visuels XP. Il faut rajouter Application.EnablesVisualStyles() dans le sub Main
    - pour le splitter : c'est dû à un foutu code que j'ai pompé sur le Net pour supprimer les scintillements.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Protected Overrides ReadOnly Property CreateParams As System.Windows.Forms.CreateParams
            'supprime les scintillements
            Get
                Dim cp As CreateParams = MyBase.CreateParams
                cp.ExStyle = cp.ExStyle Or &H2000000
                cp.ExStyle = cp.ExStyle Or &H80000
                Return cp
            End Get
        End Property
    Je supprime ce code d'autant que, depuis, j'ai trouvé une autre méthode beaucoup plus efficace pour supprimer les scintillements

  19. #19
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour noftal,

    Dans le sub main que j ai posté ici :

    http://www.developpez.net/forums/d13...n/#post7536742

    les effets visuels sont bien activés. C est toi dans un topic plus bas qui a dis que tu avais "épurés" le code !

    Donc au final je ne vois pas en quoi cela aurait un impacte.....a tester avec mon exemple original.

    A+

  20. #20
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    La classe program comme elle est construite corresponds au standard d'une application avec les parametres de projet par defaut :

    - Permet la gestion des styles visuelles de l instance de la fenetre appelee dans la sub main (le cas echeant sa affiche un style comme un Windows classique) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(False)
    - La classe mutex permet l'execution du programme en instance unique et non d'une fenêtre ou de ta dlgbox !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Dim instanceCountOne As Boolean = False
                Using mtex As Mutex = New Mutex(True, Application.ProductName, instanceCountOne)
                    If instanceCountOne Then
                        Application.Run(New Form1)
                        mtex.ReleaseMutex()
                    End If
                End Using
    Si tu reprends ces 2 parametrages tu remarqueras qu'on les retrouve ici mais nous les avons codés manuellement car par necessité tu as due ajouter un point d'entrée d application personnalisé :

    http://imabox.fr/a2/1321102013DVOtxd00.png


    J'espère que c'etait assez clair.

    Bonne journée.

    J'ai un pb avec l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.SetCompatibleTextRenderingDefault(False)
    J'ai une erreur lors de l'exécution car cette instruction doit être utiliée avant toute invocation de formulaire windows.
    Or, avant le Sub Main(), j'ai dû ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public f as Form = New FormPrincipal
    En effet, j'ai besoin de faire référence à mon instance de formulaire principal en plein d'endroits par la suite. Il va de soi que le code Sub Main voit son instruction modifiée également : Application.Run(f).

    J'ai essayé de m'affranchir de cette déclaration mais j'ai alors des erreurs lors de l'exécution du reste du code. Par exemple ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' dans un module 
    dim dt as DataTable = FormPrincipal.MonDataSetTypé.dt_maDataTable
    Alors que, avant cette instruction, cette datatable a bien été remplie avec la méthode FILL (dans la sub Load de FormPrincipal), dt renvoie 0 lignes.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Forcer de tuer un process après fermeture d'une applic!
    Par _shuriken_ dans le forum Windows XP
    Réponses: 14
    Dernier message: 26/01/2007, 15h27
  2. Forcer la fermeture d'une application
    Par Bissada dans le forum Langage
    Réponses: 2
    Dernier message: 06/10/2005, 21h42

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