8
votes

empêcher une instance multiple d'une forme d'affichage

Je travaille sur une application dans laquelle il existe une forme principale et plusieurs autres formes pouvant être utilisées simultanément. Lorsqu'un utilisateur clique sur Ouvrir un autre formulaire, je voudrais le faire pour que le formulaire ne puisse plus ouvrir le formulaire s'il est déjà ouvert.

showdialog ne fonctionnera pas car l'utilisateur doit toujours avoir accès aux commandes sur la forme principale. p>

Voici mon code pour la fenêtre d'aide, tous les autres formulaires ouvrent de la même manière. P >

private void heToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form help = new help();
            help.Show();
        } 


0 commentaires

8 Réponses :


2
votes

Selon la façon dont vous voulez gérer cela, vous pouvez faire quelques choses:

  1. Utilisez le modèle Singleton avec un verrouillage global de suivi libéré lorsque le formulaire est disposé
  2. Gérer l'état dans le formulaire d'appel et appelez simplement "Afficher" si le formulaire a déjà été lancé.
  3. prelaunch le formulaire, mais pas le montrer, de cette façon de gérer une seule référence et de le montrer au besoin

0 commentaires

-3
votes

Essayez de faire votre aide Global. XXX


0 commentaires

11
votes

Utilisez un singleton: xxx


2 commentaires

Faire la variable _Instance null lors de la fermeture du formulaire sera parfaite avec ceci :)


@mletterle Votre code semble avoir une erreur en tant que variable non statique ne peut pas être utilisée à l'intérieur d'une méthode statique.



15
votes

Vous pouvez également utiliser les formulaires ouverts de l'application pour voir s'il est ouvert xxx

éditer: Pour être plus clair, cela permet à l'utilisateur de fermer l'aide à tout moment et facilite la tâche de gérer que d'économiser une référence à la fenêtre d'aide. Rien à nettoyer, rien à maintenir.


0 commentaires

-1
votes

Avez-vous envisagé de faire une forme MDI? Cela garantit que votre formulaire parent est toujours visible et que vos formulaires enfants sont contenus au sein du parent. Ensuite, vous n'avez besoin que de marcher votre liste de formulaires et d'appelez-les. Aucun singletons n'a besoin (dont beaucoup considèrent comme une mauvaise pratique de programmation de toute façon).


0 commentaires

0
votes

Peut-être que cela vous aidera.

private Form help;

private void heToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (help == null || (help != null && help.IsDisposed))
        {
            help = new Form();
        }
        if (!help.Visible)
        {
            help.Show();
        }
        else
        {
            help.BringToFront();
        }
    }


0 commentaires

1
votes

Vous pouvez procéder comme ceci, déclarez que les variables de Theee onze en haut: xxx pré>

et après p> xxx pré>

mettre dans l'événement form1_formiqué P>

Form1.GetFormInstance.Show();


0 commentaires

1
votes

Eh bien, cela peut l'aider à travailler pour moi xxx

pour une meilleure documentation Voir ci-dessous http://projectpeeker.com/2018/07 / 04 / Ouverture de Windows-Application-Multiple-fois /


0 commentaires