Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Kann eine Form schliessen aber nicht erneut öffnen
latrine66
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

Kann eine Form schliessen aber nicht erneut öffnen

beantworten | zitieren | melden

Hallo Allerseits!
Ich habe ein Prob mit Visual 2005 und dem schliessen von Windows Forms. Wenn ich aus der Mainform eine zweite aufrufe klappt es das erstemal. Wenn ich die zweite form schliesse und erneut öffnen möchte kommt die Fehlermeldung System.ObjectDisposedException wurde nicht behandelt.
Message="Auf das verworfene Objekt kann nicht zugegriffen werden.\r\nObjektname: Form2."


Ich habe auf Visual 2003 meinen Techniker gemacht und bin mir keiner Schuld bewusst. was bei einem formname.close() falsch sein soll. Ferner hab ich noch die Frage was bei der Deklaration das partial class zu bedeuten hat.

Bin für jede antwort dankbar !
Wer nicht fragt bleibt dumm
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3.430
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo laterine66,

bitte beachte folgendes: [Hinweis] Wie poste ich richtig?

Beschreibe dein Problem genau, und poste deinen Code (+ angabe wo die Exception ausgelöst wird).
Zitat von laterine66
Ferner hab ich noch die Frage was bei der Deklaration das partial class zu bedeuten hat.

Schaue dir dazu diesen Link (Understanding and Using partial classes) an. Dort wird das Ganze erklärt.

mfg
michlG
private Nachricht | Beiträge des Benutzers
jaensen
myCSharp.de - Experte

Avatar #avatar-2657.png


Dabei seit:
Beiträge: 2.760
Herkunft: München

beantworten | zitieren | melden

Ist es möglich das du deine Form in eine member variable gestopft hast und dann bei dieser einfach nochmal Show() aufrufst.
Dann musst du die Form nämlich nach dem Closen nochmal mit new MyForm() instanzieren bevor du sie erneut öffnest Close() ruft intern nämlich Dispose() auf was ganz gut zu deiner Exception passen würde.

Funktioniert:


   Form frm = new Form();
         frm.Show();
         frm.Close();
         frm = new Form();
         frm.Show();

Funktioniert nicht:


   Form frm = new Form();
         frm.Show();
         frm.Close();
         //frm = new Form();
         frm.Show();
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von jaensen am .
private Nachricht | Beiträge des Benutzers
latrine66
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

Sorry für den Code


namespace test2form2
{
    public partial class Form1 : Form
    {
        Form2 test2 = new Form2();
        public Form1()
        {
            InitializeComponent();
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            test2.Show();
        }
    }
}

Ich habe in den Forms nichts weiter drin. wenn ich test2 das erstemal schliesse mit dem X oder per this.close() auf einem Button geht es. Beim zweitem Aufruf aus Form1 Raus gibt er mir den oben genannten fehler.
Wer nicht fragt bleibt dumm
private Nachricht | Beiträge des Benutzers
jaensen
myCSharp.de - Experte

Avatar #avatar-2657.png


Dabei seit:
Beiträge: 2.760
Herkunft: München

beantworten | zitieren | melden

So ists richtig:


namespace test2form2
{
    public partial class Form1 : Form
    {
        Form2 test2 = new Form2();
        public Form1()
        {
            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (test2.IsDisposed)
                test2 = new Form2();
            test2.Show();
        }
    }
}
private Nachricht | Beiträge des Benutzers
latrine66
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

danke für die schnelle Antwort! Werds gleich testen
Wer nicht fragt bleibt dumm
private Nachricht | Beiträge des Benutzers
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

beantworten | zitieren | melden

Hi,
ich hab ein ähnliches Problem:

Hier der Code, das Ziel ist wenn ich auf ButtonEntertainment klicke daß das FormTS geschlossen wird und das FormEntertainment geöffnet wird.

program.cs

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new FormTS());
        }
    }
}

FormTS.cs:

namespace WindowsFormsApplication1
{
    public partial class FormTS : Form
    {
    FormEntertainment entertainment = new FormEntertainment();
        public FormTS()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void buttonEntertainment_Click(object sender, EventArgs e)
        {
            if (entertainment.IsDisposed)
                entertainment = new FormEntertainment();
            FormEntertainment.Show();
                  
        }
    }
}


FormEntertainment.cs:

namespace WindowsFormsApplication1
{
    public partial class FormEntertainment : Form
    {
        public FormEntertainment()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }
    }
}

Der Debugger schmeisst an Fehler sobald ich auf den ButtonEntertainment drücke.
"Auf das verworfene Objekt kann nicht zugegriffen werden.
Objektname: FormEntertainment."

Gruss
private Nachricht | Beiträge des Benutzers
Dexter323
myCSharp.de - Member



Dabei seit:
Beiträge: 89
Herkunft: Hannover

beantworten | zitieren | melden


 private void buttonEntertainment_Click(object sender, EventArgs e)
        {
            if (entertainment.IsDisposed)
                entertainment = new FormEntertainment();
            FormEntertainment.Show();

        }

du solltest auch die variable mit .show aufrufen und nicht das das Form ->


 private void buttonEntertainment_Click(object sender, EventArgs e)
        {
            if (entertainment.IsDisposed)
                entertainment = new FormEntertainment();
            entertainment .Show();

        }
private Nachricht | Beiträge des Benutzers
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

beantworten | zitieren | melden

Danke für den Hinweis, has geändert und nochmal durch den Debugger gejagt. Problem besteht weiterhin:

Zeile:

Application.Run(new FormTS());
Fehler:
Zitat
Auf das verworfene Objekt kann nicht zugegriffen werden.
Objektname: FormEntertainment.
private Nachricht | Beiträge des Benutzers
jaensen
myCSharp.de - Experte

Avatar #avatar-2657.png


Dabei seit:
Beiträge: 2.760
Herkunft: München

beantworten | zitieren | melden

Ich glaube du schmeißt da ein bisschen was durcheinander...

Wenn du "FormTS" initialisieren willst (Application.Run(new FormTS()); ) warum sollte dann ein Fehler zu "FormEntertainment" kommen?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von jaensen am .
private Nachricht | Beiträge des Benutzers
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

beantworten | zitieren | melden

Der Fehler tritt auf sobald ich auch den ButtonEntertainment im FormTS Klicke um das FormEntertainment zu öffnen
private Nachricht | Beiträge des Benutzers
jaensen
myCSharp.de - Experte

Avatar #avatar-2657.png


Dabei seit:
Beiträge: 2.760
Herkunft: München

beantworten | zitieren | melden

Zitat

Application.Run(new FormTS());
Dann hast du aber die falsche Codezeile gepostet.

Wie schaut dein Code denn jetzt aus?
Schau dir auch das: nochmal an.
private Nachricht | Beiträge des Benutzers
Dexter323
myCSharp.de - Member



Dabei seit:
Beiträge: 89
Herkunft: Hannover

beantworten | zitieren | melden

versuch mal ganz einfach das ->


namespace WindowsFormsApplication1
{
    public partial class FormTS : Form
    {
   
        public FormTS()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void buttonEntertainment_Click(object sender, EventArgs e)
        {
            FormEntertainment entertainment = new FormEntertainment();
            FormEntertainment.Show();

        }
    }
}
private Nachricht | Beiträge des Benutzers
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

beantworten | zitieren | melden

Hi,
warum es da hackt keine Ahnung, ich hab die zwei Forms neu gemacht und es geht...
Danke für die Hilfe
private Nachricht | Beiträge des Benutzers
EL_Broto
myCSharp.de - Member



Dabei seit:
Beiträge: 55

beantworten | zitieren | melden

Zitat von Dexter323
versuch mal ganz einfach das ->


namespace WindowsFormsApplication1
{
    public partial class FormTS : Form
    {
   
        public FormTS()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void buttonEntertainment_Click(object sender, EventArgs e)
        {
            FormEntertainment entertainment = new FormEntertainment();
            FormEntertainment.Show();

        }
    }
}

ähm, kann auch nicht funktionieren, wenn du show auf die klasse machst

du musst das show auf die referenz(also auf enterteinment machen)
private Nachricht | Beiträge des Benutzers
Dexter323
myCSharp.de - Member



Dabei seit:
Beiträge: 89
Herkunft: Hannover

beantworten | zitieren | melden

ah sorry falsch kopiert ;-) ... so ->


namespace WindowsFormsApplication1
{
    public partial class FormTS : Form
    {

        public FormTS()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void buttonEntertainment_Click(object sender, EventArgs e)
        {
            FormEntertainment entertainment = new FormEntertainment();
            entertainment.Show();

        }
    }
}
private Nachricht | Beiträge des Benutzers