Witam wszystkich. Wie ktoś z was jak wywołać message box'a przy kliknięciu na "krzyżyk"?
W WinFormsach wystarczy obsłużyć zdarzenie FormClosing
i wywołać MessageBox.Show()
, o to Ci chodzi?
Skorzystać ze zdarzenia FormClosing? Poszukaj czasem w Google zanim założysz wątek na forum.
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ś.
W takim razie pokaż jaki masz kod, bo inaczej ciężko będzie coś doradzić.
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();
}
}
}
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 :-)
"Wyklikać" czyli?
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.
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;
}
}
Niestety nie udało mi się jeszcze tego zrobić ani "wyklikać". Może ktoś jaśniej wyjaśnić jak to "wyklikać"?
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.
No kurna, tak jak każde inne zdarzenie, robisz FormClosing i mając wygenerowaną pustą metodę dopiero wklejasz kod.
Poradziłem sobie z tym problemem, dzięki za pomoc.