begin process at 2010 02 09 23:29:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.NET

 > SURCHARGE CLASS FORM POUR PALIER AU PROBLÈME DE LA VALIDATION SYSTÉMATIQUE DES CONTRÔLES LORS DU CLOSE D'UNE FORM

SURCHARGE CLASS FORM POUR PALIER AU PROBLÈME DE LA VALIDATION SYSTÉMATIQUE DES CONTRÔLES LORS DU CLOSE D'UNE FORM


 Information sur la source

 Description

Je voulais pouvoir utiliser la possibilité que mes contrôles déclenchent leur validation à chaque fois qu'ils perdent le focus mais aussi ne pas déclencher cette validation lorsque l'utilisateur souhaite quitter la fenêtre (croix, Alt+F4, CancelButton, Escape). Le problème c'est que si la propriété AutoValidate d'une fenêtre est «EnablePreventFocusChange» alors la validation s'exécute dès que le close de la fenêtre est appelé.

Mettre le CauseValidation du CancelButton à false ne suffit pas. En plus la croix et le Alt+F4 ne serait pas impactés.

J'ai donc fait cette petite surcharge de la class Form pour résoudre ce problème. Quand vous créez une fenêtre, il suffit de la faire hériter de MaForm au lieu de Form.

Source

  • using System;
  • using System.Windows.Forms;
  • using System.Security.Permissions;
  • namespace MonNameSpace
  • {
  • /// <summary>
  • /// Représente une version surchargée de la class Form
  • /// </summary>
  • public class MaForm : Form
  • {
  • private const int WM_CLOSE = 0x10;
  • [UIPermission(SecurityAction.LinkDemand, Window=UIPermissionWindow.AllWindows)]
  • protected override bool ProcessDialogKey(Keys keyData)
  • {
  • if (keyData == Keys.Escape && CancelButton != null)
  • {
  • AutoValidate = AutoValidate.Disable;
  • }
  • return base.ProcessDialogKey(keyData);
  • }
  • [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)]
  • protected override void WndProc(ref Message m)
  • {
  • switch (m.Msg)
  • {
  • case WM_CLOSE:
  • AutoValidate = AutoValidate.Disable;
  • break;
  • default:
  • break;
  • }
  • base.WndProc(ref m);
  • }
  • }
  • }
using System;
using System.Windows.Forms;
using System.Security.Permissions;

namespace MonNameSpace
{
    /// <summary>
    /// Représente une version surchargée de la class Form
    /// </summary>
    public class MaForm : Form
    {
        private const int WM_CLOSE = 0x10;

        [UIPermission(SecurityAction.LinkDemand, Window=UIPermissionWindow.AllWindows)]
        protected override bool ProcessDialogKey(Keys keyData)
        {
            if (keyData == Keys.Escape && CancelButton != null)
            {
                AutoValidate = AutoValidate.Disable;
            }
            return base.ProcessDialogKey(keyData);
        }

        [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)]
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case WM_CLOSE:
                    AutoValidate = AutoValidate.Disable;
                    break;
                default:
                    break;
            }
            base.WndProc(ref m);
        }
    }
}

 Conclusion

La surcharge de WndProc ne suffit pas à elle toute seule car le Escape déclenche le message «WM_CLOSE» que si le contrôle en cours est validé.

Ce n'est pas une méthode très très élégante mais je n'ai jamais trouvé aucune autre solution qui gère tout les cas énoncés plus haut.

Sous VB6 les fenêtres n'avaient pas ce problème. Il y avait juste un petit problème de validation qui ne se déclenchait pas pour le contrôle ayant le focus lorsque l'on faisait «Entrée» au clavier.


 Sources de la même categorie

Source avec Zip CHAT SERVER-CLIENT par abderrahmenbilog
Source avec Zip Source avec une capture Source .NET (Dotnet) SIMULATION DE CONSOLE POUR WINDOWS MOBILE par originalcompo
Source avec Zip Source .NET (Dotnet) BASE DE DONNÉES EN XML par DanMor498
Source avec Zip Source avec une capture Source .NET (Dotnet) SIMPLECONV - APPLICATION DE CONVERSION MONÉTAIRE AVEC TAUX E... par Jeffrey_
Source avec Zip Source .NET (Dotnet) TRAITEUR D'IMAGE (MINI) par ycyril

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) LANCER UNE FEUILLE FILLE MDI UNE ET UNE SEULE FOIS par anadeveloppeur
Source avec Zip Source avec une capture Source .NET (Dotnet) HORLOGE FLOTTANTE SUR LE BUREAU AVEC CHOIX FUSEAU par smiloo
Source avec Zip Source .NET (Dotnet) GESTION D'ÉVENEMENTS INTER FORM par ecosmose
Source avec Zip Source .NET (Dotnet) CRÉER SON PROPRE DESIGNER COMME CELUI DE VISUAL STUDIO par ShareVB
Source avec Zip Source avec une capture Source .NET (Dotnet) USERCONTROL PYROWINDOW par alvinp

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Comment ne pas valider les contrôles lors du close d'une fenêtre [ par cyci ] Salut à tous,Je souhaiterais empêcher qu'une fenêtre enclenche la validation des zones lorsque je clique sur la croix. Je veux garder le paramètre Aut .close .dispose d'une form [ par olibara ] Bonjour J'apprends csharp et la POO sur le tas depuis janvier.Bien qu'ayant déja fait quelques appli tres fonctionelles, j'ai encore des tas de chos Retourner une valeur lors de la fermeture d'une form [ par Noursounet ] Bonjour à tous! Voila j'ai 2 problèmes:   1- Je suis en train de développer une dll qui fourni des messagebox un peu plus jolies que celles de base. T Form au premier plan par dessus une fenêtre FullScreen [ par saifer ] Bonjour à tous !Un problème se pose à moi depuis hier soir, je souhaite afficher ma Form par dessus une fenêtre pleine écran (un jeu vidéo). J'ai essa Fermeture d'une form avec la croix [ par arb ] Bonjourj'ai une form qui a été crée et je voudrais desactiver la croix rouge en haut à droite pour fermer. Comment faire pour soit faire disparaître c Problème pour positionner un process à l'intérieur d'une fenêtre [ par urban45 ] Bonsoir, Je lance un process que j'intégre à l'intérieur d'une Form grâce à la fonction SetParent().Il peut paraître débile mais j'ai le problème su Mettre plusieurs table adapter dans une meme fenêtre [ par maitesn1 ] Bonjour,j'ai essayé de mettre plusieurs tables adapters dans une meme form en utilisant Visal C# 2005.J'ai glissé dans la form toutes les tables adapa Recuperation de données a la fermeture d'un Form [ par darkolive ] Bonjour,Je voudrais récupérer des données a la fermeture d'un Form.Pour l'instant j'ouvre un form avec un lien sur le premier.    Form2 fr2= new Form2 form [ par choukri175 ] Bonjour à tout le monde,J'ai une petite question concernant la mise en forme d'une fenêtre : j'ai besoin que la fenêtre s'ouvre d'une manière grande (


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales