This.Close() récalcitrant

Résolu
Signaler
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Bonjour

J'ai une Form (CGuiStart) qui est un ecran de login
je souhaite lancer une autre Form (CGuiMain) en cas d'authentification..... rien de bien complexe, je pensais.


<HR>




if (
CResource.IsConnected)
{

CGuiMain oGui =
new
CGuiMain();
oGui.Show();

this.Close();
}




<HR>

le problème, c'est que ma Form de login ne se masque pas...

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic

8 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Application.Run( new StartForm( ) ) ajoute Application.ExitThread( ) à l'événement de ta forme, ca ferme la boucle de message, je pense que tu peux regler le problème si tu utilises StartForm.ShowDialog( ) sur ta première forme de login, après tu appeles StartForm.Dispose( ) et là tu lances ta forme principale avec Application.Run( new MainForm( ) ).
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut, c'est pas un problème avec la boucle de message ? Tu l'as créer comment ta première forme ?
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
sans heurs....

elle est lancée via (code généré)

Application.Run ( new CGuiStart() );

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
Je viens de faire le test avec un projet bidon, sous VB.Net (2005 également) :


<HR>
Private
Sub Button1_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click

Dim F
As
New Form1
F.Show()

Me.Close()

End
Sub

<HR>

et le comportement est identique....
je voudrais que la seconde feuille prenne le relais, mais l'application se ferme

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
Salut,

L'appel de close sur le formulaire principal de ton appli entraine effectivement la fin de la boucle de message.
Une solution pourrait être un "controleur" qui lancerais/masquerais l'invite de login et l'autre formulaire suivant l'action nécessaire, sans être détruit avant la fin "réelle" de l'application.
Une autre serais de lancer une deuxieme boucle suivant la reussiste du login ou non (ptet un peu bencale celle ci)
Une autre serais d'utiliser Hide() au lieu de Close() afin que ton formulaire de login soit masqué et non détruit.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
essaye ca :

CGuiStart guiStart = new CGuiStart()
Application.Run ( );


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
Super, ca fonctionne enfin.

Merci a vous (ca fait drole, pour une fois d'être du coté des demandeurs, sur le Forum ^^ )


<HR>


CGuiStart oGuiStart =
new
CGuiStart();
oGuiStart.ShowDialog();

Application.Run(
new
CGuiMain());

Et une fois l'identité de l'utilisateur confirmée, je fais un

this.Dispose()


<HR>

Ca fonctionne, pourtant je trouve cette solution un peu bancale.... est 'LA' solution ?

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Ce qui peut être amusant, c'est de faire une seule forme, mais "polymorphe" une fois le login validé, tu disposes tous les controls, tu appelles this.Controls.Clear( ) puis tu la reconstruits différemment.