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

Windows Forms Discussion :

[vb.net] Desactiver la croix de fermeture d'1 Form [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut [vb.net] Desactiver la croix de fermeture d'1 Form
    Bonjour!

    Dans mon application, je voudrais qu'il soit impossible de fermer un Form par un click sur la "croix", soit que celle-ci n'apparait pas, soit que celle-ci est desactivee.

    Quelqu'un peut-il me dire? Merci.

  2. #2
    AP
    AP est déconnecté
    Membre confirmé
    Avatar de AP
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 480
    Points : 538
    Points
    538
    Par défaut
    lors de l'evenement closing de ta form:
    e.cancel = true

  3. #3
    Membre régulier Avatar de Piet
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 108
    Points
    108
    Par défaut
    J'sais pas exactement la syntaxe en VB, mais en C#, si tu veux aussi désactiver "réduire" et "plein écran", il suffit d'ajouter :
    dans le load de la form.

    Et il faut passer par quelque chose de plus compliqué pour désactiver rien que la croix, ce n'est pas implémenté directement.

    Il faut ajouter ça dans la form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    protected override CreateParams CreateParams
    {
       get
       {
          int CS_NOCLOSE = 0x0200;
          CreateParams param = base.CreateParams;
          param.ClassStyle |= CS_NOCLOSE;
     
          return param;
       }
    }

    sans oublier un bouton de fermeture de la form dans la form, sinon, ce sera le gestionnaire de tâches qu'il faudra appeler

    ou encore la solution Windows himself :
    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
     
    [DllImport("user32.dll")]
    private static extern IntPtr GetSystemMenu(
    IntPtr hWnd, 
    bool bRevert
    );
     
    [DllImport("user32.dll")]
    private static extern bool EnableMenuItem(
    IntPtr hMenu, 
    uint uIDEnableItem,
    uint uEnable
    );
     
    private const int SC_CLOSE = 0xF060;
    private const int MF_GRAYED = 0x00000001;
    Piet

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    dans t'est propriété de ta form tu met ControlBox à FALSE
    et tu n'aura plus de croix ni "plein ecran" ni "réduire"

  5. #5
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut
    Citation Envoyé par AP
    lors de l'evenement closing de ta form:
    e.cancel = true
    Cela me semble être la meilleur solution et la plus simple, cela annule aussi ALT+F4.
    En tout cas c'est ce que j'utilise dans mes appli. suivi d'un appel de ma fonction quitter qui demande une confirmation à l'utilisateur.
    Pensez aux règles et au qui rime avec !

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Merci beaucoup a vous tous.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Points : 94
    Points
    94
    Par défaut
    Bonjour à tous,

    ce topic est un peu dépassé, mais je tenais à développer l'option proposée en première réponse, car la première fois que je l'ai lue, je n'ai rien compris, étant encore un archi débutant vu que si on écrit simplement e.Cancel, il devient impossible de fermer le WindowsFrom.

    On utilise donc bien l'événement FormClosing, mais avec une variable boolean et e.Cancel qui peut effectivement annuler la fermeture :

    On déclare la variable Public pour la modifier depuis n'importe quelle partie du code. Il est important de mettre la valeur à False au départ. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public FermetureWindowsForm As Boolean = Flase
    Puis on travail l'événement FormClosing, attention, l'événement FormClosed n'admet pas de e.Cancel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub WF_MonWindowsForm_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
     
    If Not FermetureWindowsForm = True Then e.Cancel = True
     
    End Sub
    De cette manière, tant qu'on ne déclares pas dans que FermetureWindowsForm = True, le WindowsFrom ne se fermera jamais, alors ne oublie pas de le faire
    Pensez à mettre le topic en si votre problème a été solutionné. / Un petit est le bien venu si la réponse vous satisfait
    Ce qui mérite d'être fait mérite d'être bien fait.

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    C'est pas faut.

    Il me semble que l'évenement Closing de la form est appelé lors de la fermeture du cette dernière peut importe que ca soit par l'instruction Close, la croix ou un Alt-F4.

    Il faut donc une condition pour déterminer si on annule la fermeture (ou pas).

    La réponses de Piet me semble être la plus correcte selon la question de base.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Bonjour à tous !
    Je me suis inscrit ce matin afin d'avoir l'occasion de vous dire merci, certaines de vos informations m'ont fait gagner du temps. A soixante-dix ans passés, il est préférable d'en perdre le moins possible !

    J'avais ce problème de l'utilisation de la croix. la sortie de la forme s'effectue par un bouton "Menu" qui met fin (Close) à son utilisation et fait apparaître un menu d'accès à d'autres formes.

    Le problème consistait donc à donner à la croix la même fonction que le bouton "Menu", ce qui grâce à vous s'est simplement réduit au code source suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub WF_MonWindowsForm_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
     
            If Form2.PrévisionSauve <> "" Then
                Form15.Visible = True
                Form15.ActivationDialogue(1, Me.Top, Me.Height, Me.Left, Me.Width, "De nouvelles données n'ont pas été enregistrées. Souhaitez-vous le faire ?")
            Else
                Form2.Visible = True
                Form2.Activate()
            End If
     
        End Sub
    La condition "Form2.PrévisionSauve" dérive la fermeture sur une forme dialogue qui propose d'enregistrer les données qui ne l'ont pas encore été.
    Les données à sauvegarder ont été enregistrées dans une variable de la forme "Menu" resté active, mais invisible.

    Voilà, c'est dit, c'est fait, à une prochaine occasion... et encore une fois, merci.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2010, 15h52
  2. desactiver ou griser la croix de fermeture d'une page
    Par lamiae2 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/04/2009, 01h02
  3. Réponses: 15
    Dernier message: 22/02/2009, 14h36
  4. Réponses: 2
    Dernier message: 21/08/2008, 11h32
  5. Supprimer la croix de fermeture dans une Form
    Par lio33 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 03/07/2008, 16h04

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