9
votes

Fermer la forme sans application de sortie

Je travaille actuellement sur un petit projet et j'aimerais de l'aide.

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 form1 avec this.close () il quitte tout le programme.

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.

Merci.


3 commentaires

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?


6 Réponses :


7
votes

Vous pouvez masquer la première forme au lieu de la fermeture:

this.Hide();
Form2 form2 = new Form2();
form2.Show();


3 commentaires

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 ...



3
votes

Si vous utilisez WPF, vous pouvez définir Application.MainWindow à votre deuxième fenêtre "principale", avant de fermer votre formulaire de connexion.


1 commentaires

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 / ...



3
votes

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) ?


1 commentaires

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 ());



2
votes

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());
}


0 commentaires

0
votes

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();


0 commentaires

1
votes

Quelle est votre opinion pour créer quelque chose comme ça

p>

SON Icône de la bac appelée P>

donc utilisateur peut fermer tout formulaires code> et l'application en cours d'exécution code> , et peut revenir à l'application n'importe quel temps code> p>

permet de commencer la codage (note que c'est WPF Application) p> xxx pré>

et nous avons ces fonctions p> xxx pré>

et dans 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();
    }
}


0 commentaires