Je reçois le message d'erreur ne peut pas accéder à un objet disposé.
Nom d'objet: 'ApplicationProperties'. Strong> Lorsque j'essaie de ré-ouvrir un formulaire après la fermeture. J'ai remarqué que cela provient de formulaires de sortie et de sortir est public partial class ApplicationProperties : Form
{
//Creates and sets the instance MainBoxWindow.
public MainBox MainBoxWindow { get; set; }
4 Réponses :
Essayez-ceci dans votre Formulant CODE> Evénement: private void ApplicationProperties_FormClosing(object sender, FormClosingEventArgs e)
{
//Hiding the window, because closing it makes the window unaccessible.
this.Hide();
this.Parent = null;
e.Cancel = true; //hides the form, cancels closing event
}
Je l'ai donné, mais pas de chance.
Y a-t-il autre chose qui fonctionne que nous ne voyons pas?
Je me trompe peut-être, mais ne ferme pas la forme causant le problème? J'ai besoin de le cacher? Je ne suis pas sûr à 100% à ce sujet, mais c'est ce que je me faisais bien.
Je ne suis pas au courant de rien d'autre qui fonctionne. Je mettrai à jour la question avec quelques informations supplémentaires.
E.Cancel empêche le formulaire de la fermeture. Qu'est-ce que c'est.parent = null faire?
C'est le code de mon patron, j'essaie d'élargir son programme et, étant donné que cela travaillait sur les boutons, je l'ai transféré à la fonction de sortie. Si je le commente, cela ne fonctionne toujours pas.
Tout d'abord, supprimer cela.parent = null bcose Ce n'est pas nécessaire lorsque vous cachez le formulaire P>
Maintenant, lorsque vous cachez le formulaire et si vous souhaitez toujours accéder à ce formulaire de boutique de formulaire dans STATIC VAR. BCOUS Lorsque l'objet n'est plus utilisé dans l'utilisation de la poubelle le disposer et il ne sera plus disponible. p>
Comment vais-je aller à ce sujet?
Je réponds à cette question par mon téléphone portable. Alors s'il vous plaît considérer si je n'ai pas écrit actuellement
Comment stocker le formulaire dans un VaR statique?
Créez un VAR *** FORMULAIRE STATIQUE PUBLIQUE PUBLIC VOTREFORT; *** et ensuite référence votre formulaire à ce var
Cela est contrairement à l'instance que j'ai déjà compris entre les deux formes.
Créez une classe publique statique distincte et mettez ce Var dans cette classe ou si vous avez plus d'une forme, utilisez plus de var.
D'accord, je vais essayer ça.
D'accord . Cela fonctionnera correctement sinon. Demain quand j'utilise mon PC, je vais probablement vous expliquer et vous donner le code. Bonne chance
Le problème, au moins peut-être en partie, ressemble à un peu d'interdépendance de classe. p>
Lorsque vous initialisez une instance Je ne serais pas surpris si certaines choses dans Si vous souhaitez que votre ApplicationProperty CODE>, vous créez une référence à un objet code> MAINLOX CODE>, mais dans la définition de la catégorie MALEX BOX CODE> , vous créez une nouvelle référence Proporties code>, qui fait référence à un MAINLOX code> .... Je me déroude même. Est-ce que MAINLOX code> votre formulaire parent, celui qui chargeait lorsque vous démarrez l'application? p>
MAINTOXBOX CODE> sont détruites par inadvertance si vous définissez une référence à celle-ci dans la classe CODE> CLASSPROPERITES CODE> Vous cliquez sur "x". Encore une fois, c'est une supposition éduquée; Je ne sais pas si c'est la raison, mais même si le code n'est pas mauvais em> en soi, ça a l'air bizarre pour moi. p>
ApplicationProperties CODE> Fenêtre pour durer éternellement et pour simplifier les choses, il suffit d'initialiser une instance statique de celui-ci au début de la forme qui va persister la durée de votre application et montrer / Cachez-le semblable à ce que vous essayiez à l'origine. Si vous voulez être efficace et fondamental, construire et éliminer ApplicationProperties CODE> Chaque fois que vous devez laisser l'utilisateur la modifier, mais tuez la dépendance circulaire. p>
Après je ferme le programme avec le bouton « x » sur la deuxième forme I ne peut pas form2 d'accès à nouveau à cause du message d'erreur au tir
ApplicationPropertiesWindow.Show (); code> p>Lorsqu'un formulaire est fermé (
Form.Close code>), la forme elle-même et toutes ses ressources associées sont libérées. Il n'y a que deux exceptions à cette disposition automatique, comme il est indiqué dans la documentation: p>
- La forme fait partie d'une application MDI et pas em> visible. Li>
- Le formulaire a été affiché comme une boîte de dialogue modale en utilisant
ShowDialog code> (par opposition àAfficher code>). Il est conçu de cette façon afin que vous puissiez accéder aux propriétés de la boîte de dialogue (par exemple pour récupérer l'entrée d'utilisateur) après que l'utilisateur a fermé il. Li> Ol>Dans ces deux cas particuliers, vous êtes responsable d'appeler manuellement la méthode
Dispose code> du formulaire. Le deuxième cas est de loin le plus commun (n'utilise vraiment le paradigme de MDI plus), et est traitée facilement avec unen utilisant code> Déclaration: p>public class MyForm : Form { protected virtual void OnFormClosing(FormClosingEventArgs e) { // Prevent the form from closing. e.Cancel = true; // Hide it instead. this.Hide(); } // ...other code in your form class }
Pouvez-vous montrer le code qui échoue dans la manière dont vous décrivez dans le Début i> de la question? C'est celui qui a vraiment besoin de fixation, plutôt que de votre tentative de pirater.
@Codygray J'ai mis à jour la question montrant où l'erreur tire.
Quel est le comportement souhaité? Vous essayez d'accéder à l'objet de l'applicationProperties que vous avez déjà éliminé, ou vous l'éliminez involontairement dans votre code quelque part. Initialisez un nouvel objet ApplicationProperties ou trouvez où vous vous disposez et supprimez le code si vous souhaitez que cet objet reste en mémoire. Vérifiez la définition de la classe ou faites une trouvatation sur le dispositif
J'essaie d'accéder à l'objet, et il est disposé lorsque je clique sur le bouton "x".
Je le réalise. Ce que je dis est, est-ce que vous voulez "vouloir" l'objet d'être disposé ou voulez-vous que cela persiste? Lorsque vous chargez le formulaire ApplicationProperties, utilisez-vous-le avec des valeurs stockées ailleurs? Ou disparaissent-ils lorsque l'utilisateur ferme le formulaire pour toujours, et c'est ok? La bonne réponse dépend de la manière dont vous souhaitez que l'application se comporte dans votre contexte. Vous pouvez vous débarrasser de la méthode Dispose par défaut comme solution rapide, mais cela signifie que l'objet persistera en mémoire jusqu'à ce que vous le disposiez manuellement ou que le parent se ferme.
Oh désolé a propos de ca. Il existe d'autres valeurs sauvegardées via ce formulaire sur un fichier .xml. Donc, je pense que si le cas échéant est d'être disposé que tout ira bien, et je pouvais simplement lâcher le fichier .xml chaque fois que le formulaire est ouvert. Aussi, j'ai cherché mon code de disposer et rien est venu.
Dans ce cas, cela irait probablement bien d'initialiser simplement un nouvel objet ApplicationsProperty chaque fois que vous souhaitez le recharger. Je spécule purement que vous essayez d'utiliser le même identifiant parce que je ne vois pas où vous initialisez le formulaire ci-dessus, mais si vous nous montrez cette partie de votre code, nous pouvons vous aider si vous n'êtes pas tout à fait sûr.
C'est ce que j'ai essayé de faire, j'ai essayé de mettre l'initialisation dans l'événement Button_primé pour ouvrir le formulaire, mais cela n'a pas fonctionné