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.
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();
}
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.
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.
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();
}
}
Vous pouvez également fermer l'application:
Application.Exit();
Cela mettra fin aux processus.
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
Quelques méthodes pour ouvrir/démarrer un formulaire
Tous agissent différemment, explorez-les!
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();
}
}
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();
}
}