web-dev-qa-db-fra.com

Comment fermer le formulaire en C #

Ok, une classe Windows Forms, WindowSettings et le formulaire ont un bouton "Annuler". Lorsque l'utilisateur clique sur le bouton, la boîte de dialogue DialogSettingsCancel apparaîtra et demandera à l'utilisateur s'il est sûr de vouloir effectuer l'action. La boîte de dialogue contient 2 boutons, un bouton "Oui" et un bouton "Non". Si l'utilisateur clique sur le bouton "Oui", je souhaite que les paramètres DialogSettingsCancel et WindowSettings soient fermés.

Mon gestionnaire d'événements button_Click dans DialogSettingsCancel:

private void button1_Click(object sender, EventArgs e)
{
    //Code to trigger when the "Yes"-button is pressed.
    WindowSettings settings = new WindowSettings();
    this.Close();
    settings.Close();
}

Lorsque j'exécute mon application et accédez au formulaire de configuration, cliquez sur le bouton "Annuler", puis sur le bouton "Oui". Seul DialogSettingsCancel se ferme sans fermer WindowSettings.

Pourquoi ça ne marche pas?

J'ai aussi essayé de changer

this.Close();
settings.Close();

à

settings.Close();
this.Close();

Mais toujours le même résultat.

9
osvein

Vous avez besoin de l'instance réelle de la WindowSettings ouverte et non d'une nouvelle.

Actuellement, vous créez une nouvelle instance de WindowSettings et appelez Close à ce sujet. Cela ne fait rien car cette nouvelle instance n'a jamais été montrée.

Lors de l'affichage de DialogSettingsCancel, définissez l'instance actuelle de WindowSettings en tant que parent.

Quelque chose comme ça:

Dans WindowSettings:

private void showDialogSettings_Click(object sender, EventArgs e)
{
    var dialogSettingsCancel = new DialogSettingsCancel();
    dialogSettingsCancel.OwningWindowSettings = this;
    dialogSettingsCancel.Show();
}

Dans DialogSettingsCancel:

public WindowSettings OwningWindowSettings { get; set; }

private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    if(OwningWindowSettings != null)
        OwningWindowSettings.Close();
}

Cette approche prend en compte le fait qu'une DialogSettingsCancel pourrait potentiellement être ouverte sans WindowsSettings en tant que parent.

Si les deux sont toujours connectés, vous devriez plutôt utiliser un paramètre constructeur:

Dans WindowSettings:

private void showDialogSettings_Click(object sender, EventArgs e)
{
    var dialogSettingsCancel = new DialogSettingsCancel(this);
    dialogSettingsCancel.Show();
}

Dans DialogSettingsCancel:

WindowSettings _owningWindowSettings;

public DialogSettingsCancel(WindowSettings owningWindowSettings)
{
    if(owningWindowSettings == null)
        throw new ArgumentNullException("owningWindowSettings");

    _owningWindowSettings = owningWindowSettings;
}

private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    _owningWindowSettings.Close();
}
8
Daniel Hilgarth
new WindowSettings();

Vous venez de fermer une toute nouvelle instance du formulaire qui n'était pas visible au départ.

Vous devez fermer l'instance original du formulaire en l'acceptant comme paramètre de constructeur et en le stockant dans un champ.

6
SLaks

Pourquoi ne pas utiliser la méthode DialogResult pour fermer le formulaire?

if(DialogSettingsCancel.ShowDialog() == DialogResult.Yes)
{
     this.close();
}

Pour que cela fonctionne, vous devrez le faire dans votre formulaire "WindowSettings" pendant que vous appelez le formulaire DialogSettingsCancel. De la même manière que vous appelez OpenFileDialog ou tout autre formulaire de dialogue.

3
jforward5

Votre fermeture de votre instance de la fenêtre de paramètres juste après la création. Vous devez d'abord afficher la fenêtre de configuration, puis attendre le résultat de la boîte de dialogue. S'il revient comme annulé, fermez la fenêtre. Par exemple:

private void button1_Click(object sender, EventArgs e)
{
    Settings newSettingsWindow = new Settings();

    if (newSettingsWindow.ShowDialog() == DialogResult.Cancel)
    {
        newSettingsWindow.Close();
    }
}
2
Logan G.

Vous pouvez également fermer l'application:

Application.Exit();

Cela mettra fin aux processus.

1
user4227915

Il existe différentes méthodes pour ouvrir ou fermer winform . Form.Close () est une méthode permettant de fermer un winform.

Lorsque 'Form.Close ()' est exécuté, toutes les ressources créées dans ce formulaire sont détruites . Ressources signifie contrôle et tous ses contrôles enfants (libellés, boutons), formulaires, etc.

Quelques autres méthodes pour fermer winform 

  1. Form.Hide ()
  2. Application.Exit ()

Quelques méthodes pour ouvrir/démarrer un formulaire 

  1. Form.Show ()
  2. Form.ShowDialog ()
  3. Form.TopMost ()

Tous agissent différemment, explorez-les!

0

envoyez le WindowSettings en tant que paramètre du constructeur du DialogSettingsCancel puis sur le bouton1_Click lorsque vous appuyez sur yes, appelez la méthode de fermeture des deux.

public class DialogSettingsCancel
{
    WindowSettings parent;

    public DialogSettingsCancel(WindowSettings settings)
    {
        this.parent = settings;        
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //Code to trigger when the "Yes"-button is pressed.
        this.parent.Close();
        this.Close();
    }
}
0

par exemple, si vous souhaitez fermer un formulaire Windows lorsqu'une action est effectuée, il existe deux méthodes pour le faire.

1.Pour le fermer directement 

Form1 f=new Form1();
f.close(); //u can use below comment also
//this.close();

2.Nous pouvons également cacher la forme sans la fermer

 private void button1_Click(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        Form2 f2 = new Form2();
        int flag = 0;
        string u, p;
        u = textBox1.Text;
        p = textBox2.Text;
        if(u=="username" && p=="pasword")
        {
            flag = 1;
        }
        else
        {
          MessageBox.Show("enter correct details");
        }
        if(flag==1)
        {
            f2.Show();
            this.Hide();
        }

    }
0
Jaswanth Chilaka