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

C# Discussion :

Interdire l'ouverture d'un formulaire déjà ouvert et identique par son contenu


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : novembre 2020
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Interdire l'ouverture d'un formulaire déjà ouvert et identique par son contenu
    Bonjour,

    Je travaille sur un programme ou j'ai un datagridview rempli par des données venant de MySql.
    Si je clique sur une cellule d'une ligne de ce datagridview, un formulaire enfant s'ouvre reprenant l'ensemble des données de la ligne du datagridview pour être modifiées et chaque ligne est identifiée par son id.
    Je peux donc ouvrir autant de formulaires qu'il y a de lignes dans le datagridview, jusque là pas de problèmes.
    Le souci c'est que je peux ouvrir plusieurs formulaires pour une même ligne du tableau donc plusieurs formulaires enfants pour un même id.
    Est ce qu'il y a une solution pour empêcher d'ouvrir une deuxième fois un formulaire correspondant à une ligne du datagridview qui a déjà été ouvert ?
    Empêcher l'ouverture d'un deuxième formulaire identique j'ai trouvé mais ce que je veux c'est bloquer un deuxième formulaire qui contient le même identifiant de la ligne du datagridview.
    Je suppose qu'il faut vérifier les identifiants des données de tous les formulaires enfants pour comparer à celui sur lequel je viens de cliquer pour savoir si je peux ou non l'ouvrir... Mais comment faire pour accéder à tous les formulaires pour vérifier puis interdire si besoin ?

    Merci pour votre aide...

    Patrice

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : février 2009
    Messages : 150
    Points : 218
    Points
    218
    Par défaut
    Maintenir à jour une "List" des identifiants de formulaires ouverts devrait suffire. Il suffirait de vérifier qu'un identifiant donné n'est pas présent dans la liste avant d'autoriser l'ouverture d'un nouveau formulaire.

  3. #3
    Membre expert
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    mars 2005
    Messages
    1 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2005
    Messages : 1 739
    Points : 3 249
    Points
    3 249
    Par défaut
    Citation Envoyé par Krantz Voir le message
    Maintenir à jour une "List" des identifiants de formulaires ouverts devrait suffire. Il suffirait de vérifier qu'un identifiant donné n'est pas présent dans la liste avant d'autoriser l'ouverture d'un nouveau formulaire.
    J'ajouterai que la fenêtre du formulaire doit être responsable de l'insertion et de l'effacement de l'enregistrement dans cette liste d'identifiant.
    La fenêtre contenant la grille ne fait que la lire.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : novembre 2020
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Krantz Voir le message
    Maintenir à jour une "List" des identifiants de formulaires ouverts devrait suffire. Il suffirait de vérifier qu'un identifiant donné n'est pas présent dans la liste avant d'autoriser l'ouverture d'un nouveau formulaire.
    Bonjour,

    Merci pour votre réponse... J'ai finalement adopté cette solution avec un messagebox pour avertir que la fenêtre est déjà ouverte. J'aurais voulu pouvoir la mettre en avant si elle a déjà été ouverte plutôt que d'ouvrir un messagebox. Cela aurait été plus sympa.

  5. #5
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    juin 2007
    Messages
    850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : juin 2007
    Messages : 850
    Points : 1 820
    Points
    1 820
    Par défaut
    Si tu es en WinForms la classe Form possède une méthode Activate() qui doit permettre de la ramener en avant-plan. Il te suffirait de garder quelque part la liste de tes forms en plus des id, par exemple avec un Dictionary et d'appeler cette méthode si la form concernée est présente.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : novembre 2020
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Noxen Voir le message
    Si tu es en WinForms la classe Form possède une méthode Activate() qui doit permettre de la ramener en avant-plan. Il te suffirait de garder quelque part la liste de tes forms en plus des id, par exemple avec un Dictionary et d'appeler cette méthode si la form concernée est présente.
    Bonne idée ça... Facile de garder les forms dans une liste... Souci c'est comment je récupère la form qui a été créée pour l’insérer dans la liste ? Je génère une Form4 FicheSoin = new Form4 puis je l'ouvre avec show mais cela ne me dit pas comment s'appelle cette nouvelle form. Comment je peux faire ?

  7. #7
    Membre expert
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    mars 2005
    Messages
    1 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2005
    Messages : 1 739
    Points : 3 249
    Points
    3 249
    Par défaut
    Citation Envoyé par patriceg1473 Voir le message
    Bonne idée ça... Facile de garder les forms dans une liste... Souci c'est comment je récupère la form qui a été créée pour l’insérer dans la liste ? Je génère une Form4 FicheSoin = new Form4 puis je l'ouvre avec show mais cela ne me dit pas comment s'appelle cette nouvelle form. Comment je peux faire ?
    Déclarer un Dictionary<String, Form> où String est ton Id et Form est l'instance d'une fiche

    Puis un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Form form;
    if (dico.ContainsKey(Id))
    {
        form = dico[Id];
    }
    else
    {
        form = new Form4();
        dico.Add(Id, form);
    }
     
    form.Show();

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : novembre 2020
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par popo Voir le message
    Déclarer un Dictionary<String, Form> où String est ton Id et Form est l'instance d'une fiche

    Puis un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Form form;
    if (dico.ContainsKey(Id))
    {
        form = dico[Id];
    }
    else
    {
        form = new Form4();
        dico.Add(Id, form);
    }
     
    form.Show();
    Bonjour,

    Parfait !!! C'est génial...
    Voici ce que j'ai mis :
    La déclaration du dicto accessible depuis la form appelée pour effacer son ID du dico à la fermeture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     internal static Dictionary<string, Form> form_patients_ouverts = new Dictionary<string, Form>();
    Et la code pour gérer l'ouverture de la form ou la mettre en avant si déjà ouverte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Form Formpatient;
     
                if (form_patients_ouverts.ContainsKey(Form1.id_patient))
                {
                    Formpatient = form_patients_ouverts[Form1.id_patient];
                    Formpatient.BringToFront(); //Pour mettre form en avant
                }
                else
                {
                    Formpatient = new Form5(this);
                    form_patients_ouverts.Add(Form1.id_patient, Formpatient);
                    Formpatient.Show(); //Pour ouvrir form
                }
    Merci !

  9. #9
    Membre éclairé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    février 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : février 2004
    Messages : 726
    Points : 876
    Points
    876
    Par défaut
    Il me semble qu'il doit être possible d'obtenir la liste des fenêtres ouvertes de l'application en consultant une propriété spécifique de l'instance de l'objet "Application" justement...
    En tout les cas, en C++ cela est prévu au travers du framework de la MFC.
    .
    Pour la défense de nos droits, merci de voter pour : https://connect.microsoft.com/Visual...wupdated-event
    together we stand, divided we fall
    .

  10. #10
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    juin 2007
    Messages
    850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : juin 2007
    Messages : 850
    Points : 1 820
    Points
    1 820
    Par défaut
    Citation Envoyé par star Voir le message
    Il me semble qu'il doit être possible d'obtenir la liste des fenêtres ouvertes de l'application en consultant une propriété spécifique de l'instance de l'objet "Application" justement...
    En tout les cas, en C++ cela est prévu au travers du framework de la MFC.
    .
    Il ouvre ses fenêtre lui-même, il n'y a donc pas de difficulté à en garder une référence quelque-part.

    Par contre il est vrai que si une fenêtre est fermée il faudra la supprimer de la liste pour éviter les fuites mémoire.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/04/2013, 09h24
  2. Réponses: 2
    Dernier message: 03/06/2011, 16h38
  3. [AC-2000] Interdire l'ouverture d'un formulaire quand enregistrement null
    Par ROUSSIGNE dans le forum IHM
    Réponses: 1
    Dernier message: 12/11/2009, 17h08
  4. Réponses: 3
    Dernier message: 06/01/2007, 14h56
  5. lecture de son à l'ouverture d'un formulaire
    Par cynferdd dans le forum IHM
    Réponses: 4
    Dernier message: 16/06/2003, 15h31

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