Avatar billede jan2001 Nybegynder
15. januar 2008 - 00:29 Der er 8 kommentarer og
1 løsning

Lukke form men spørger to gange

Jeg prøver at lukke et program med følgende:

            if (MessageBox.Show("Vil du lukke", "",
        MessageBoxButtons.YesNo, MessageBoxIcon.Question)
        == DialogResult.Yes)
            {
                this.Close;
            }

Svarer jeg Ja, så spørges igen, og først i andet forsøg lukkes programmet. Hvorfor?
Avatar billede bulgroz Nybegynder
15. januar 2008 - 07:19 #1
Du skal lægge din kode i FormClosing, og så blot kalde Form.Close() når du ønsker at lukke din form. Her er et lille eksempel hvor et klik på en knap lukker formen.

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
        }

        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Close Form?", "Close?", MessageBoxButtons.OKCancel);

            if (dialogResult != DialogResult.OK)
            {
                e.Cancel = true;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
Avatar billede jan2001 Nybegynder
15. januar 2008 - 12:45 #2
Ok, så uanset hvor jeg skriver this.close(), så vil formclosing eventen blive aktiveret. Men sætter jeg en else på, så vil den ikke lukke.

        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Close Form?", "Close?", MessageBoxButtons.OKCancel);

            if (dialogResult != DialogResult.OK)
            {
                e.Cancel = true;
            }
else
{
this.windowstate = formwindowstate.minimized;
}

Den minimerer som den skal, men svarer jeg OK, så lukker den ikke formen, men kun dialogboksen.
Hvorfor kan der ikke sættes en else på?
        }
Avatar billede bulgroz Nybegynder
15. januar 2008 - 12:54 #3
Ok nu e det så et nyt spørgsmål. Mit pattern er det man bruger når man ønsker en Close-Cancel option ved luk af form. Hvis du ønsker at minimere formen i stedet for at lukke kan du gøre sm du har lyst (if... else...).

Det vigtige er at sættes e.Cancel til true lukkes formen. Hvis e.Cansel sættes false forblive dn åben. Hvis du ænsker at minimere i den situation, kan du blot gøre dette.
Avatar billede bulgroz Nybegynder
15. januar 2008 - 13:00 #4
Lille eksempel:
Følgende kode forhindrer at formen lukkes, men minimeres i stedet...

        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Minimize Form?", "Minimize?", MessageBoxButtons.OKCancel);

            e.Cancel = true;

            if (dialogResult == DialogResult.OK)
            {
                this.WindowState = FormWindowState.Minimized;
            }
        }
Avatar billede bulgroz Nybegynder
15. januar 2008 - 13:03 #5
Og her yderligere, hvis der trykkes Ok minimeres, ellers lukkes:

        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Minimize Form?", "Minimize?", MessageBoxButtons.OKCancel);

            if (dialogResult == DialogResult.OK)
            {
                e.Cancel = true;
                this.WindowState = FormWindowState.Minimized;
            }
        }

Som du ser er forskellen meget lille, det hele afhænger af hvad du vil.
Avatar billede jan2001 Nybegynder
15. januar 2008 - 13:44 #6
Jo, det ser ud til at virke. Dog i omvendt rækkefølge. klikker jeg OK, så minimerer den, og klikker jeg annuller, så lukker den. e.cancel = true står jo først. Men ok. Tak for hjælpen. Gider du lægge et svar.
Avatar billede bulgroz Nybegynder
15. januar 2008 - 14:09 #7
Som jeg skriver afhænger det af hvad du vil opnå. Og på mt eksempel klikker man Ok for at minimere som det fremgår af TextBoxen (det er kun et eksempel). Jeg gætter på at du selv kan rette til så den passer dit aktuelle behov.
Avatar billede bulgroz Nybegynder
15. januar 2008 - 14:11 #8
e.cancel er et flag du sætter. Hvornår du sætter det er op til dig, når blot det bliver sat korrekt.
Avatar billede jan2001 Nybegynder
15. januar 2008 - 14:32 #9
ok, troede at det var e.cancel der lukkede formen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester