Wywołanie okna MessageBox z pytaniem przed zamknięciem aplikacji krzyżykiem

0

Witam wszystkich. Wie ktoś z was jak wywołać message box'a przy kliknięciu na "krzyżyk"?

2

W WinFormsach wystarczy obsłużyć zdarzenie FormClosing i wywołać MessageBox.Show(), o to Ci chodzi?

0

Skorzystać ze zdarzenia FormClosing? Poszukaj czasem w Google zanim założysz wątek na forum.

0

somekind - tak o to mi chodzi. furious, korzystałem z google, niestety przy kliknięciu w krzyżyk nie wyskakuje message box, a próbowałem przykładu z google który właśnie wysłałeś.

0

W takim razie pokaż jaki masz kod, bo inaczej ciężko będzie coś doradzić.

0

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Piecyk
{
    public partial class Form1 : Form
    {
        public int i = 0;
        public Form1()
        {
            InitializeComponent();
            
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(MessageBox.Show("Exit or no?",
                               "My First Application",
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Information) == DialogResult.No) {
                e.Cancel = true;
             }
            }

        private void button1_Click(object sender, EventArgs e)
        {
            i = i + 1;

            double s63, s64, l05, b13, c26; 
            double razem;
            string start,stop;

            label1.Text = DateTime.UtcNow.AddHours(1).ToShortTimeString();
            label6.Text = DateTime.UtcNow.AddHours(2).ToShortTimeString();
            start = label1.Text;
            stop = label6.Text;
            label4.Text = Convert.ToString(i);
            label7.Text = DateTime.Now.ToShortDateString();
            MessageBox.Show("Dodałeś regał", "Uwaga", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            s63 = double.Parse(textBox1.Text);
            s64 = double.Parse(textBox2.Text);
            l05 = double.Parse(textBox3.Text); 
            b13 = double.Parse(textBox4.Text);
            c26 = double.Parse(textBox5.Text);

            
            razem = s63 + s64 + l05 + b13 + c26;
            label14.Text = razem.ToString();

            string reg = label4.Text;
            string dzis = DateTime.Now.ToShortDateString();
            string path = @"D:\regaly\" + dzis + ".txt";
            string path2 = @"D:\regaly\pomocnicze\" + dzis + ".txt";
            DirectoryInfo folder = new DirectoryInfo(dzis);
            folder.Create();
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(path, true))
            {

                file.WriteLine("Regal nr" + reg + ":");
                file.WriteLine();
                file.WriteLine("S63:" + s63);
                file.WriteLine("S64:" + s64);
                file.WriteLine("L05:" + l05);
                file.WriteLine("B13:" + b13);
                file.WriteLine("C26:" + c26);
                file.WriteLine();
                file.WriteLine("razem:" + razem);
                file.WriteLine("=====================");
                file.Close();
            }
            using (System.IO.StreamWriter files = new System.IO.StreamWriter(path2, true))
            {

                files.Write("Regal nr" + reg + " " + start + "-" + stop);



                if (comboBox1.Text == "1")
                {
                    files.WriteLine(" (1)");
                }
                else if (comboBox1.Text == "2")
                {
                    files.WriteLine(" (2)");
                }
                else if (comboBox1.Text == "3")
                {
                    files.WriteLine(" (3)");
                }

                files.Close();
            }
            richTextBox1.LoadFile(path2, RichTextBoxStreamType.PlainText);
            richTextBox2.LoadFile(path, RichTextBoxStreamType.PlainText);

            


                 textBox1.Text = "0";
                 textBox2.Text = "0";
                 textBox3.Text = "0";
                 textBox4.Text = "0";
                 textBox5.Text = "0";
        }

        private void button3_Click(object sender, EventArgs e)
        {
     
            DialogResult wybor = new DialogResult();
            wybor = MessageBox.Show("Czy na pewno chcesz zakończyć?", "Zakończenie programu", MessageBoxButtons.YesNo,
                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (wybor == DialogResult.Yes)
            {
                Application.Exit();
            }
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string reg = label4.Text;
            string dzis = DateTime.Now.ToShortDateString();
            string path = @"D:\regaly\" + dzis + ".xls";
            string path2 = @"D:\regaly\pomocnicze\" + dzis + ".txt";
            richTextBox1.LoadFile(path2, RichTextBoxStreamType.PlainText);
            richTextBox2.LoadFile(path, RichTextBoxStreamType.PlainText);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(this);
            form2.Owner = this;
            form2.ShowDialog();
        }


        


        }

    }


 

i form 2

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Piecyk
{
    public partial class Form2 : Form
    {
        Form1 form1;
        public Form2(Form1 form1)
        {
             this.form1 = form1;
            InitializeComponent();
        }

        
        public void button1_Click(object sender, EventArgs e)
        {
            string zmien;
            zmien = textBox1.Text;
            form1.i = Convert.ToInt32(zmien);
            Close();
        }
    }
}


0

Zdarzenie trzeba najpierw wyklikać, a nie tylko wkleić kod.

Wypada użyć raczej MessageBoxIcon.Exclamation a nie Information.

hint: jak nie wiesz czego użyć to zobacz czego używa Notatnik :-)

0

"Wyklikać" czyli?

1

Czyli użyć Object Inspector czy czegoś podobnego, co tam macie w IDE do C#;

Poza tym Twoje okno dialogowe jest źle obsługiwane, dlatego że jeśli zamknie się je krzyżykiem to i tak program się zamknie; Powinieneś sprawdzić czy rezultat dialogu to DialogResult.Yes i jeśli tak, przypisać do e.Cancel wartość True; W każdym innym przypadku przypisać False, bez względu na to czy okno zwróci No czy Cancel;

W skrócie można to zapisać tak:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = MessageBox("Are you sure you want to exit the program?",
                          "My First Application",
                          MessageBoxButtons.YesNo,
                          MessageBoxIcon.Question) == DialogResult.Yes;
}

No i niepotrzebnie wkleiłeś kod całego programu, zamiast tylko kod zdarzenia FormClosing - przecież masz problem tylko z zamykaniem formularza, a nie z całym modułem.

0
 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.ApplicationExitCall)
            {
                return;
            }
            DialogResult wybor = new DialogResult();
            wybor = MessageBox.Show("Czy na pewno chcesz zakończyć?", "Zakończenie programu", MessageBoxButtons.YesNo,
                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (wybor == DialogResult.Yes)
            {
                Application.Exit();
            }
            else
            {
                e.Cancel = true;
            }

        }
0

Niestety nie udało mi się jeszcze tego zrobić ani "wyklikać". Może ktoś jaśniej wyjaśnić jak to "wyklikać"?

0

W oknie Properties (F4 na klawiaturze, żeby je zobaczyć), w zakładce Events (kliknij w błyskawicę), znajdź na liście FormClosing i kliknij dwa razy w pole obok.

0

No kurna, tak jak każde inne zdarzenie, robisz FormClosing i mając wygenerowaną pustą metodę dopiero wklejasz kod.

0

Poradziłem sobie z tym problemem, dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1