Je travaille actuellement sur un petit projet et j'aimerais de l'aide. P>
J'ai 2 formulaires, le premier est une fenêtre de connexion et le second sera le programme principal. Le problème que j'ai est que lorsque je ferme J'ai un sentiment que j'ai besoin d'utiliser le filetage ou quelque chose comme ça, mais je ne trouve pas la bonne ressource pour que mon problème soit résolu. P>
Merci. P> form1 code> avec this.close () code> il quitte tout le programme. P>
6 Réponses :
Vous pouvez masquer la première forme au lieu de la fermeture:
this.Hide(); Form2 form2 = new Form2(); form2.Show();
Ensuite, j'ai un autre problème, lorsque je fermais Form2, je voudrais fermer la forme cachée1, comment puis-je faire ça?
@Victor: de même manière, mais vous allez avoir besoin d'offrir un moyen de fermer véritablement les formes et de fermer l'application.
Basé sur le fait que vous cachez le formulaire et que vous ferez seulement la fermeture de l'application lorsque vous fermez ce formulaire masqué, ce qui sera à côté, une ressource insonorisée ouvrira toute la période. Je dirais que ce n'est pas la plus grande solution ...
Si vous utilisez WPF, vous pouvez définir Application.MainWindow à votre deuxième fenêtre "principale", avant de fermer votre formulaire de connexion. P>
En fait, dans vb.net, vous pouvez spécifier le mode d'arrêt de l'application. C # ne vous permet pas de dire facilement. social.msdn.microsoft. com / forums / en-us / winforms / thread / ...
Impossible de modifier votre programme.cs afin qu'il exécute la forme principale et dans le lancement de la forme principale, elle crée et affiche une forme de connexion, puis se cache elle-même (en attente de la connexion à s'afficher) ? p>
Exactement ce que j'allais dire: Assurez-vous que vous n'utilisez pas le premier formulaire pour charger l'application comme celle-ci ... Application.run (nouveau formulaire1 ());
programme.cs est l'endroit où votre fonction principale est. Si vous avez créé le projet en tant qu'application Windows avec Visual Studio, il y aura une fonction principale qui exécute le formulaire qui s'ouvre lorsque vous démarrez le programme. Il suffit d'obtenir les informations de connexion du formulaire de connexion dans Main, puis appellez la deuxième fenêtre. Voici un exemple:
private static void Main(string[] args)
{
//there's some other code here that initializes the program
//Instead of running a new form here, first create it and then run it
Form1 form1 = new Form1(); //Creates the form
Application.Run(form1); //Runs the form. Program.cs will continue after the form closes
//Get the login info
string username = form1.Username;
string password = form1.Password;
//Get rid of form1 if you choose
form1.Dispose();
//Validate the user info
//Run the main program
Application.Run(new mainProgramForm());
}
Ouvrir le programme.cs - Vous pouvez faire un peu avant l'appel à la demande d'application, y compris de montrer vos informations de connexion. Voici un échantillon de l'un de mes projets. Il essaie de trouver la connexion de base de données. Si cela ne peut pas, il ouvre un assistant et se connecte à l'accès ou à MSSQL. Si l'open est bon, il montre un écran spalh et exécute enfin l'application, sinon il se ferme.
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
DialogResult LclResult;
EESDatabasePersistentData LclPersist;
LclPersist = new EESDatabasePersistentData();
string LclDataType;
string LclDatabase;
string LclServer;
string Password;
string UserID;
if (!LclPersist.GetConnection(out LclServer, out LclDatabase, out LclDataType, out UserID, out Password))
{
// Run the connection wizard
GetConnection(out LclServer, out LclDatabase, out LclDataType, out UserID, out Password);
}
if (LclDataType == "ACCESS")
InitDataAccess(LclDatabase);
else if (LclDataType == "SQLSERVER")
InitDataSQL(LclServer, LclDatabase, UserID, Password);
if (OpenGood)
{
if (!System.Diagnostics.Debugger.IsAttached)
{
FormSplash.Instance.SetupVersion();
///////////////////////////////////
// If we don't call do events
// splash delays loading.
Application.DoEvents();
FormSplash.Instance.Show();
}
Application.DoEvents();
Application.Run(new FormMentorMain());
}
else
Application.Exit();
Quelle est votre opinion pour créer quelque chose comme ça
SON Icône de la bac appelée P>
donc utilisateur peut permet de commencer la codage (note que c'est WPF Application) p> et nous avons ces fonctions p> et dans fermer tout formulaires code> et l'application en cours d'exécution code> , et peut revenir à l'application n'importe quel temps code> p> fermeture de la fenêtre code> Evénement auditeur (N'oubliez pas de l'ajouter) p> private void Window_Closing(object sender, CancelEventArgs e)
{
if (_ForceClose == false)
{
e.Cancel = true;
Minimize();
}
}
Est-ce Winforms ou WPF? Et ce n'est pas une question de filetage, mais plutôt une question de ce que "cela" est dans la portée que vous utilisez le plus probablement. Le code aidera.
Dupliqué possible de fermeture d'un formulaire, puis appelez un autre.
Je n'ai pas beaucoup fait avec Winforms, mais juste pour vérifier, vous créez votre écran de connexion avec la fenêtre principale car il est parent, non?