Comment puis-je fermer une forme actuelle et ouvrez le principal en C#?
Je suis en mesure d'obtenir mon premier formulaire, intitulé "FieldReprogrammingSoftware" pour fermer la fenêtre et un autre formulaire appelé "Configuration" pour ouvrir l'aide du code suivant.
Setup fh = new Setup();
fh.Show();
this.Hide();
Cependant je n'arrive pas à faire la même chose pour revenir à FieldReprogrammingSoftware, car ce nom n'est même pas une option dans le Installation code. Si j'essaie juste de type FieldReprogrammingSoftware j'obtiens un message d'erreur disant:
Le nom de "FieldReprogrammingSoftware'
n'existe pas dans le contexte actuel
Des Idées?
Veuillez garder à l'esprit que je suis un noob en C#.
NVM, je viens de constater que pour ce produit, il est ok pour que le FieldReprogrammingSoftware formulaire de séjour ouverte, tandis que l' Installation forme est donc, maintenant, je suis juste en utilisant
Setup fh = new Setup();
fh.Show();
sur le FieldReprogrammingSoftware forme et
this.close()
sur le formulaire de configuration. Mon dieu que c'était beaucoup plus facile de le faire en VB
Et de l'espace de noms pour les deux formes est FieldUpdate, c'est ce que ma Solution est appelée.
OriginalL'auteur Bryan | 2010-01-12
Vous devez vous connecter pour publier un commentaire.
Dans le formulaire de Configuration, vous pouvez utiliser ceci:
cela permettra de montrer la première forme de nouveau. "0" est l'index de l'application principale forme.
Im en supposant que par le titre de son question "principale" est la forme initiale.
il pourrait penser sa forme initiale, mais ça ne résout pas le problème quand ce n'est pas la première forme dans la liste.
Je suis d'accord, mais rien n'empêche quiconque de vérifier par programme, au lieu de coder en dur l'index.
C'est la première forme et la cela fonctionne. Bon à savoir dans le cas où j'ai besoin de l'utiliser une autre fois, merci.
OriginalL'auteur Inisheer
Soit vous avez à passer dans l'instance de la fenêtre principale pour
Setup
ou créer une variable statique de tenir le formulaire principal.Vous pouvez également vous abonner à
Setup
Forme Fermée de l'événement et de montrer ensuite le formulaire à nouveau.Comme
Modifier pour .NET 2.0
merci. J'avais suggéré statique ainsi, il existe de nombreuses façons à la peau d'un chat 🙂
+1 sachez cependant que cela ne fonctionne que si le formulaire principal est censé être chargé à chaque fois que la forme est fermée. Si le scénario d'avoir besoin d'ouvrir l'appel à la forme, alors qu'il avait besoin de prendre une approche différente.
Ce code me donne toutes sortes d'erreurs sur la nécessité de multiples 0 et ; et non valides ) et > les expressions
êtes-vous à l'aide .NET 3.5 ? si pas de voir mon édité réponse.
OriginalL'auteur Stan R.
Dans la situation que vous avez décrite, vous voulez l'instance d'origine de retour. Vous avez utilisé
this.hide
à masquer le formulaire.Évidemment, vous ne voulez pas de nouvelles d'une autre instance qui est un gaspillage de ressources; ce que vous devez faire est de stocker l'instance initiale, quelque part, vous pouvez obtenir à partir du formulaire enfant.
Il existe quelques méthodes de le faire, mais je serait probablement prendre l'un des deux approches:
Singleton:
Magasin de votre formulaire principal dans le singleton de sorte que lorsque vous avez besoin pour obtenir dos, vous pouvez vous référer à la stockées exemple, plutôt que d'newing une autre instance inutilement.
Maintenant, quand vous voulez la MainForm, au lieu de newing il vous serait référence le singleton.
Ce n'est pas chargé afin de ne pas créer une instance du formulaire principal jusqu'à ce que vous avez besoin pour la première fois. Après cela, il sera jusqu'à ce que vous avez besoin de nouveau, sauf si vous en disposer, auquel cas le cycle recommencera.
L'ouverture de la deuxième forme comme un enfant de la première:
Sinon, si vous voulez OtherForm ouvert comme une boîte de dialogue modale (c'est à dire que vous êtes incapable d'interagir avec d'autres fenêtres, tandis que celui-ci est ouvert), puis faire
otherForm.ShowDialog(this);
Et de OtherForm:
Sinon, Stan R a discuté une bonne idée à l'aide d'un gestionnaire d'événement pour attraper la clôture de l'événement de l'enfant forme. Bien, cela peut potentiellement complexe si vous avez plusieurs formulaires d'ouverture de votre enfant, donc, si cette forme est une boîte de dialogue commune pour de nombreuses formes, cette approche doit être utilisée avec prudence.
Vous pouvez également accéder à l'Application.OpenForms de la collection pour obtenir des formes qui sont actuellement ouverts au sein de votre application. Vous aurez besoin de connaître l'indice de la forme que vous voulez activer.
Chaque approche a ses inconvénients. Naturellement, la route que vous prendrez compléter le reste de votre architecture et de pratiques de conception, de sorte que votre code est conforme à maintenir.
Bonne prise, merci. Vous avez raison, j'ai corrigé mon code extrait.
+1 pour moi une bonne tout autour de la mise en œuvre.
OriginalL'auteur BenAlabaster
Si vous avez besoin d'utiliser le formulaire de Configuration temporairement, une autre approche serait d'ouvrir le formulaire sous la forme d'un dialogue.
OriginalL'auteur JohnForDummies
Suivez votre cœur, laissez le message d'erreur sera votre guide.
Vérifier votre FieldProgrammingSoftware du formulaire espace de Noms, situé en haut de votre fichier de code, juste en dessous de votre aide d'instructions. Parfois, en particulier lors de la copie d'un code, ou en ajoutant de nouvelles formes à partir d'autres projets, il est facile de se mêler des espaces de noms.
Par exemple, si vous créez un nouveau projet appelé WindowsApplication1, tous les nouveaux formulaires que vous ajoutez à votre projet hérite automatiquement de l'espace de nom et sera WindowsApplication1 comme leur espace de noms. Si vous ajoutez un formulaire à partir d'un autre projet à votre projet, il permettra de garder l'espace de noms de l'autre projet.
Si vous n'êtes pas intentionnellement l'ajout d'un nouvel espace de noms à votre code, il ne sonne pas comme vous le faites, assurez-vous juste deux match (ou les deux, au moins, ont des espaces de noms). Sinon, pour ajouter le nouvel espace de noms, ou cliquez à la fin de l'objet que vous n'obtenez pas intellisense et appuyez sur Ctrl . pour voir si VS pouvez trouver vos objets de l'espace de noms pour vous.
C'est une réponse impressionnante. Maintenant, je veux savoir ce que la question est.
OriginalL'auteur George Johnston