2016-03-11 1 views
1

Un formulaire est affiché à l'aide de ShowDialog (this). Utilisateur ferme et au lieu de le disposer je veux préserver les changements et le tenir prêt jusqu'à la prochaine appel ouvert:C# Tous les formulaires sauf le propriétaire sont renvoyés lorsque je masque un formulaire ShowDialog

 private FormClosing(object sender, FormClosingEventArgs e) 
     { 
      this.Hide(); 
      e.Cancel = true; 
     } 

Mais cacher les résultats de dialogue dans l'envoi de sauvegarder toutes les autres formes ouvertes mais le propriétaire. Utiliser Show (this) au lieu de ShowDialog() le corrige mais je dois le garder ouvert en tant que boîte de dialogue.

+1

Vous n'avez pas besoin de le cacher. Gardez une référence au formulaire et montrez-le à nouveau lorsque vous en avez besoin. –

+1

Btw, vous n'avez pas besoin de ce code. 'ShowDialog' ne ferme pas/ne dispose pas le formulaire - voir [Form.ShowDialog] (https://msdn.microsoft.com/en-us/library/c7ykbedk (v = vs.110) .aspx) –

+0

Vous pouvez lire le ** Remarques ** section de ['ShowDialog'] (https://msdn.microsoft.com/fr-fr/library/c7ykbedk (v = vs.110) .aspx # Anchor_2) qui est également mentionné par @IvanStoev. –

Répondre

1

Vous n » Je n'ai pas besoin de le cacher. Gardez une référence à la forme et le montrer à nouveau lorsque vous avez besoin:

YourDialogForm f; 
private void button1_Click(object sender, EventArgs e) 
{ 
    if(f==null) 
     f = new YourDialogForm(); 

    f.ShowDialog(); 
} 

Plus d'informations:


également si elle est un paramètre formulaire, vous pouvez ajouter/utiliser le fichier Settings.settings dans votre projet et l oad et enregistrer les paramètres. De cette façon, vous n'avez pas besoin de compter sur l'état du formulaire. De cette façon, vous pouvez bind controls properties to settings properties et ensuite appeler Properties.Settings.Default.Save(); lors de la fermeture du formulaire.

+0

Merci, cela résout le problème. Êtes-vous sûr que garbage collector ne le disposera pas dans le futur tout en ayant peu de mémoire? – kagetoki

1

Vous devez créer une classe pour maintenir votre état

public class yourFormState{ 
//Assign your properties here   
} 


private void Form1_FormClosing(object sender, FormClosingEventArgs e) { 
    CreateConfigData(); 
} 

private void CreateConfigData() { 
using (StreamWriter sw = new StreamWriter("yourConfig.xml")) { 
    state.ButtonBackColor = System.Drawing.ColorTranslator.ToHtml(button1.BackColor); 
    XmlSerializer ser = new XmlSerializer(typeof(MyFormState)); 
    ser.Serialize(sw, state); 
} 

}

et sur votre formulaire de charge, vous pouvez charger votre configuration et accéder aux données

private void Form1_Load(object sender, EventArgs e) { 
    if (File.Exists("Yourconfig.xml")) { 
    loadConfig(); 
} //Assign your properties 


private void loadConfig() { 
XmlSerializer ser = new XmlSerializer(typeof(MyFormState)); 
using (FileStream fs = File.OpenRead("Yourconfig.xml")) { 
    state = (MyFormState)ser.Deserialize(fs); 
}