C# Form1_FormCloseing problem

EfreakZ

Cadet 1st Year
Registriert
Jan. 2013
Beiträge
11
Hallo zusammen,

ich hab ein Problem mit dem Schließen einer Form.

Was ich will: Ich hab eine Form, auf der ich den klick auf "X" zulasse, es aber nichts passieren soll.(erledigt) Wenn ich aber auf der selben Form auf einen Button klicke, soll er diese Form schließen.(nicht erledigt)

Er kommt irgendwie mit dem Form1_FormCloseing Befehl durcheinander und schließt die Form deshalb nicht über den Button. Da muss es doch eine Möglichkeit geben dies zu realisieren. Kann man den button irgendwie in eine "if-Funktion" einbauen? Ich will auf jeden fall die Form1 schließen, nicht nur verstecken(denn damit geht es).

Code um über "X" schließen zu verhindern:
Code:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;
        }

Bitte um Hilfe

Mfg EfreakZ
 
Der FormClosing-Event ist der zentrale Event vor dem Schließen eines Forms. Wenn Du willst, dass er 1x abbricht und einmal nicht, solltest du am besten eine Form-globale Variable (bool) benutzen, die nur auf True gesetzt wird, wenn man den Button benutzt. Im FormClosing setzt Du dann einfach
e.Cancel = !MeineFormVariable
 
Eine Möglichkeit wäre es, in dem Schließen-Button eine globale Variable zu setzen z.B.: Schließen = true;

Im FormClosing Event kannst du dann die Variable prüfen

if(Schließen == false)
{
e.Cancel = true;
}
 
Hmm, klingt logisch, aber ich bekomme den button einfach nicht auf eine public-variable.
Wie soll ich das machen?

Mein code im moment:

Code:
public void button2_Click(object sender, EventArgs e)      //Button "Zurück" klick
        {
            bool schließen = true;
            Close();                                                //Die Form "BMI" schließen
        }

und:

Code:
public void BMI_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (schließen == false)
            {
                e.Cancel = true;
            }
 
In button2_Click verdeckst du die Variable schließen mit einer lokalen Variable -> entferne das bool davor.

Tip: Nicht-ASCI-Zeichen gehören höchsten in die Kommentare, nicht in Variablennamen. I.d.R. werden Englische Bezeichner benutzt, z.B. allowClose.
 
Das allerdings der Wert Schließen dort initialisiert wird ist natürlich auch ungünstig, da nach dem Event wieder vergessen. Müsste der Compiler nicht ohnehin etwas anzeigen?

#Edit: Der meiste Teil vorher war nicht richtig, man lernt ja nie aus :). Der Rest stimmt jetzt.
 
Zuletzt bearbeitet: (Korrektur)
Ok danke für eure Hilfe! Ich habe es hinbekommen!:cool_alt:
Ergänzung ()

Ich habe eine Form-globale Variable erzeugt:

Code:
public partial class Willkommen : Form
    {
        bool schließen;

Anschließend mit dem Button die Variable auf true gesetzt:

Code:
public void button5_Click(object sender, EventArgs e)
        {
            schließen = true;
            Anmeldung anmeld = new Anmeldung();
            anmeld.Show();
            Close();
        }

Und zum Schluss prüft er im closing-Befehl, ob die variable schließen false is:

Code:
public void Willkommen_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (schließen == false)
            {
                e.Cancel = true;
            } 
        }
 
@PapstRatze: In WPF würde das genau so funktionieren.
Das Close() in button_Click ist nur eine Kurzschreibweise von this.Close(). Warum sollte sich Close() auf den Button beziehen? Das würde erst gar nicht funktionieren da die Klasse Button keine Close() Methode hat.
Instanz- und Klassenvariablen werden implizit initialisiert (bei bool ist das false). Bei nicht initialisierten lokalen Variablen würde VS schon eine Warnung anzeigen.

@EfreakZ: Wenn auf schließen nicht von außen zugegriffen werden soll mach' sie noch private.
 
Zurück
Oben