Grafikus C# – Windows Forms tanfolyam › 7.4 lecke

Windows Forms · 7.4 lecke · felugró üzenetek

MessageBox különböző gombjai és DialogResult

A MessageBox a legegyszerűbb párbeszédablak: egy kérdés vagy tájékoztatás, néhány gombbal. Az 1.2 leckében az OK gombos változatot ismerted meg. Most a teljes eszköztárat: a gombkészleteket, az ikonokat, az alapértelmezett gombot, a tulajdonos ablak megadását, a visszatérő DialogResult feldolgozását, és (talán a legfontosabbat) azt, mikor és hogyan érdemes üzenetet felhozni. A felesleges felugró ablak ugyanolyan rossz, mint a hiányzó figyelmeztetés.

  • kb. 90 perc
  • kezdő–közepes szint
  • MessageBox
Anime stílusú fiú és lány egy C# programozási feladatot beszél meg

A lecke végére

  • ismered a MessageBox.Show összes paraméterét (felirat, gombok, ikon, alapértelmezett gomb, tulajdonos);
  • a helyes gombkészletet és ikont választod a helyzethez;
  • a DialogResult értékét switch utasítással dolgozod fel;
  • veszélyes műveletnél biztonságos alapértelmezett gombot állítasz (Button2);
  • érthető, a felhasználót segítő üzeneteket írsz;
  • tudod, mikor jobb az állapotsor, a ErrorProvider vagy a saját párbeszédablak.

Mielőtt elkezded

Ehhez a leckéhez az 1.2 lecke (MessageBox alapjai), a 6.7 lecke (DialogResult), az 5.8 lecke (switch) és a 7.3 lecke (állapotsor) szükséges.

7.3 StatusStrip →

A MessageBox.Show paraméterei

Form1.csC#
// a teljes alak: tulajdonos, szöveg, cím, gombok, ikon, alapértelmezett gomb
DialogResult v = MessageBox.Show(
this, // a tulajdonos ablak (az üzenet ennek közepén jelenik meg)
"Törlöd a kijelölt feladatot?", // az üzenet szövege
"Feladat törlése", // a címsor
MessageBoxButtons.YesNo, // a gombok
MessageBoxIcon.Warning, // az ikon
MessageBoxDefaultButton.Button2); // az alapértelmezett gomb: a második (Nem)
MessageBoxButtonsA gombokLehetséges DialogResult
OKOKOK
OKCancelOK, MégseOK, Cancel
YesNoIgen, NemYes, No
YesNoCancelIgen, Nem, MégseYes, No, Cancel
RetryCancelÚjra, MégseRetry, Cancel
AbortRetryIgnoreMegszakítás, Újra, KihagyásAbort, Retry, Ignore
MessageBoxIconMikor?
Information (kék i)Tájékoztatás: a művelet sikerült, vagy hasznos tudnivaló.
Question (kérdőjel)Kérdés: a felhasználó döntését kéri. A mai Windows-ajánlás szerint ritkán használd, a kérdés szövege elég.
Warning (sárga háromszög)Figyelmeztetés: a művelet veszélyes vagy visszafordíthatatlan (törlés, felülírás).
Error (piros kör)Hiba: a művelet nem sikerült.
Tulajdonos (owner)Az első paraméter (this) azt adja meg, melyik ablak fölött jelenjen meg az üzenet, és melyikhez tartozik. Ennek hiányában az üzenet más ablakok mögé kerülhet, vagy a tálcán külön ablakként jelenik meg. Mindig add meg (this).
CímA cím a program vagy a téma neve (Feladat törlése), ne az üres „MessageBox”, és ne az ismétlődő szöveg.
Alapértelmezett gombAz Enter az alapértelmezett gombot nyomja meg. Veszélyes műveletnél a biztonságos gomb legyen az alapértelmezett (Button2 a Nem, vagy a Mégse), hogy egy véletlen Enter ne törölje az adatot.
ModálisA MessageBox modális: a hívó ablak mindaddig nem használható, a kód pedig nem halad tovább, amíg a felhasználó válaszol.

Jósolj!

A törlés megerősítése YesNo gombokkal jelenik meg, de az alapértelmezett gomb az első (Igen), és a felhasználó gyorsan egymás után kétszer megnyomja az Enter billentyűt. Mi történik?

Jóslat ellenőrzése

Az első Enter (amellyel például a törlést kezdte) a megerősítő üzenetben az Igen gombot nyomja meg, és a törlés megtörténik: a felhasználó észre sem veszi, hogy kérdés volt. Veszélyes műveletnél ezért a Nem (MessageBoxDefaultButton.Button2) legyen az alapértelmezett.

Az eredmény feldolgozása

A Show metódus DialogResult értékkel tér vissza. Két-három lehetőségnél az if, több esetnél a switch áttekinthetőbb (5.8 lecke). A három leggyakoribb minta:

Form1.csC#
// 1. Megerősítés (YesNo, a Nem az alapértelmezett)
private bool Megerosit(string kerdes, string cim)
{
return MessageBox.Show(this, kerdes, cim, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes;
}

// 2. Mentetlen változtatás (YesNoCancel): három út
private bool BezarhatoE()
{
if (!modosult)
{
return true;
}

switch (MessageBox.Show(this, "Mented a változtatásokat?", "Bezárás", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning))
{
case DialogResult.Yes:
return Ment(); // ha a mentés sikertelen, nem zárunk

case DialogResult.No:
return true; // elvetjük

default:
return false; // Mégse (vagy az ablak bezárása): maradunk
}
}

// 3. Újrapróbálás (RetryCancel): ciklus a hiba kijavításáig
private bool BiztosanMent(string utvonal, string tartalom)
{
while (true)
{
try
{
File.WriteAllText(utvonal, tartalom);
return true;
}
catch (IOException ex)
{
string szoveg = "A fájl nem menthető." + Environment.NewLine + "Lehet, hogy egy másik program használja. Zárd be, majd próbáld újra."
+ Environment.NewLine + Environment.NewLine + ex.Message;

if (MessageBox.Show(this, szoveg, "Mentés", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Cancel)
{
return false;
}
}
}
}
default ágA YesNoCancel esetén a Cancel a bezáró X gomb eredménye is. A default ág a „biztonságos” viselkedést adja (maradunk).
Kivétel és újrapróbálásA RetryCancel ciklusban a kivételt kezeljük, a felhasználó dönt: újra vagy mégse. Végtelen ciklus veszélye nincs, mert a Mégse kilép.
Environment.NewLineA sortörés a MessageBox szövegben: Environment.NewLine (nem kell \n jel, így a kód olvasható). Hosszabb szöveg is tördelődik.
Mentés mint visszatérésA mentés függvénye bool-t ad: a hívó eldönti, folytathatja-e (bezárás, új dokumentum).

Jósolj!

A BezarhatoE metódusban a case DialogResult.Yes ágban a mentés sikertelen (Ment() hamisat ad), de a kód nem ellenőrzi az eredményt, és mindig true-t ad vissza. Mi történik?

Jóslat ellenőrzése

Az ablak bezárul a mentetlen adattal: a felhasználó azt hitte, mentett, de nem sikerült. Ezért a mentés eredményét mindig vizsgálni kell, és sikertelen mentésnél nem szabad továbbmenni.

Hogyan írj jó üzenetet?

SzabályRosszJó
Mondd meg, mi történt„Hiba történt.”„A fájl nem menthető.”
Mondd meg, mit tegyen„Érvénytelen bevitel.”„Az e-mail címnek tartalmaznia kell a @ jelet.”
A kérdés egyértelmű, a gombok illeszkednek„Biztos?” + Igen/Nem„Törlöd a kijelölt feladatot?” + Igen/Nem
Emberi nyelv„NullReferenceException a Form1.cs 142. sorában.”„Nem sikerült megnyitni a fájlt. Ellenőrizd, hogy létezik-e.”
Ne hibáztass„Rossz jelszót adtál meg!”„A felhasználónév vagy a jelszó nem megfelelő.”
RövidHárom bekezdés magyarázatEgy-két mondat; a részletek külön (napló, súgó)

A technikai hiba a naplónak való

A felhasználónak az érthető üzenet kell, a fejlesztőnek a részletes kivétel (ex.ToString()). A kettőt válaszd szét: a felhasználónak a barátságos szöveg, a részletek a naplóba (13. fejezet) vagy egy Részletek gombos saját ablakba. A ex.Message a hibakereséshez hasznos, de nem mindig érthető a felhasználónak.

Jósolj!

Egy program minden apró eseményről (mentés, megnyitás, kész a keresés) MessageBox-ot dob fel. Mit tapasztal a felhasználó néhány perc használat után?

Jóslat ellenőrzése

Rászokik, hogy mindent azonnal bezár (nem olvassa el), és a valóban fontos üzenetet is elnyomja ugyanígy. A felugró ablak megszakítja a munkát: tartogasd a fontos döntésekre és hibákra, a többit az állapotsor (7.3 lecke) jelezze.

Mikor NE MessageBox-ot használj?

HelyzetJobb megoldás
Sikeres mentés, kész a keresés (nem kritikus visszajelzés).Állapotsor ideiglenes üzenete (7.3).
Hibás űrlapmező.ErrorProvider a mező mellett + fókusz (6.6).
Több bemenet és saját gombfeliratok kellenek (Mentés, Elvetés, Mégse).Saját párbeszédablak (7.6 lecke); a MessageBox gombfeliratai nem módosíthatók.
„Ne kérdezd többet” jelölőnégyzet vagy részletes szöveg kell.Saját párbeszédablak; az újabb .NET-ben a TaskDialog osztály is lehet (verziófüggő).
Hosszú művelet haladása.Haladásjelző az állapotsorban vagy saját ablak (11. fejezet).
📷 Képernyőkép helye

Mit tegyél ide: három üzenet egymás mellett: tájékoztatás (kék i), figyelmeztetés (sárga háromszög, a Nem kiemelve) és hiba (piros), megfelelő szöveggel.Javasolt fájlnév: winforms-7-4-uzenetek.webp · Alt szöveg: Információs, figyelmeztető és hibaüzenet

Hibakeresés: te vagy a hibadetektív

Mi a baj, és hogyan javítod?

Gondold végig az okot, és csak utána nyisd le a megoldást.

1. Az Enter véletlenül töröl

MessageBox.Show("Törlöd?", "Törlés", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);   // az alapértelmezett gomb az Igen
Hiba és javítás

Adj meg alapértelmezett gombot: MessageBoxDefaultButton.Button2 (Nem).

2. Az üzenet másik ablak mögött marad

Az üzenet nem látszik, a program „lefagyottnak” tűnik.

Ok és javítás

A MessageBox tulajdonos nélkül (az első paraméter hiányzik) más ablak mögé kerülhet, miközben a program modális állapotban vár. Mindig add meg a tulajdonost: MessageBox.Show(this, ...).

3. Az eredményt nem vizsgálja a kód

MessageBox.Show("Kilépsz?", "Kilépés", MessageBoxButtons.YesNo);
this.Close(); // a Nem gomb esetén is bezár
Hiba és javítás

A kérdésnek nincs hatása. Hasonlítsd az eredményt: if (MessageBox.Show(...) == DialogResult.Yes) { this.Close(); }.

4. A felhasználó nem érti az üzenetet

A hibaüzenet kivételszöveget mutat.

Ok és javítás

A technikai részletet naplózd, a felhasználónak írj emberi mondatot: mi történt, és mit tegyen (lásd a szabálytáblát).

5. Túl sok felugró ablak

Minden sikeres művelet után üzenet jelenik meg.

Ok és javítás

A nem kritikus visszajelzést tedd az állapotsorba (7.3 lecke). A MessageBox a döntésekre és a hibákra való.

6. A mentés sikertelen, mégis bezárul az ablak

A felhasználó azt hiszi, mentett.

Ok és javítás

A mentés eredményét (bool) nem vizsgálod. Sikertelen mentésnél a bezárás szakadjon meg (e.Cancel = true, vagy a metódus false értékkel tér vissza).

Mini projekt: üzenetlabor

Készíts programot, amellyel kipróbálhatod a MessageBox összes beállítását, és négy valós helyzet mintáját:

  1. Kísérleti lap: egy GroupBox hat választógombbal a gombkészlethez (Tag: OK, OKCancel, YesNo, YesNoCancel, RetryCancel, AbortRetryIgnore), egy GroupBox öt választógombbal az ikonhoz (None, Information, Question, Warning, Error), egy ComboBox az alapértelmezett gombhoz (1., 2., 3.; csak annyi, ahány gomb van), egy txtCim, egy txtSzoveg és egy Megmutat gomb. Az eredmény egy lblEredmeny címkében (Választott gomb: Yes) és egy naplólistában (a legutóbbi 10).
  2. A gombkészlet és az ikon értékét az Enum.Parse adja a Tag szövegéből.
  3. Helyzetek lap: négy gomb: Mentetlen változtatás (YesNoCancel), Törlés megerősítése (YesNo, Button2), Fájl felülírása (OKCancel), Mentési hiba (RetryCancel ciklus: egy szimulált hiba az első két próbálkozásnál, a harmadiknál sikerül).
  4. Minden helyzet a switch utasítással dolgozza fel az eredményt, és az állapotsorban jelzi a következményt (Elvetve, Törölve, Mentve a 3. próbálkozásra).
  5. Teszteld: minden gombkészlet, az alapértelmezett gomb kiválasztása, a bezáró X (milyen eredményt ad), és az Enter / Esc viselkedése.
Megoldás megnyitása (próbáld ki előbb önállóan!)

Az alapértelmezett gomb választó csak annyi elemet kínál, ahány gombja van a kiválasztott készletnek: az OK egyet, az OKCancel, YesNo, RetryCancel kettőt, a másik kettő hármat.

Form1.csC#
private int proba = 0;

private void Form1_Load(object sender, EventArgs e)
{
rbOK.Tag = "OK"; rbOKCancel.Tag = "OKCancel"; rbYesNo.Tag = "YesNo";
rbYesNoCancel.Tag = "YesNoCancel"; rbRetryCancel.Tag = "RetryCancel"; rbAbortRetryIgnore.Tag = "AbortRetryIgnore";

rbNincs.Tag = "None"; rbInfo.Tag = "Information"; rbKerdes.Tag = "Question";
rbFigyelmeztet.Tag = "Warning"; rbHiba.Tag = "Error";

rbOK.Checked = true;
rbInfo.Checked = true;
GombSzam();
}

private string Valasztott(GroupBox csoport)
{
foreach (Control c in csoport.Controls)
{
RadioButton rb = c as RadioButton;

if (rb != null && rb.Checked)
{
return rb.Tag.ToString();
}
}

return "OK";
}

private void GombSzam()
{
string k = Valasztott(grpGombok);
int db = k == "OK" ? 1 : (k == "YesNoCancel" || k == "AbortRetryIgnore" ? 3 : 2);

cmbAlap.Items.Clear();

for (int i = 1; i <= db; i++)
{
cmbAlap.Items.Add(i + ". gomb");
}

cmbAlap.SelectedIndex = 0;
}

private void Gombok_CheckedChanged(object sender, EventArgs e)
{
if (((RadioButton)sender).Checked)
{
GombSzam();
}
}

private void btnMutat_Click(object sender, EventArgs e)
{
MessageBoxButtons gombok = (MessageBoxButtons)Enum.Parse(typeof(MessageBoxButtons), Valasztott(grpGombok));
MessageBoxIcon ikon = (MessageBoxIcon)Enum.Parse(typeof(MessageBoxIcon), Valasztott(grpIkon));

MessageBoxDefaultButton alap = MessageBoxDefaultButton.Button1;

if (cmbAlap.SelectedIndex == 1) { alap = MessageBoxDefaultButton.Button2; }
else if (cmbAlap.SelectedIndex == 2) { alap = MessageBoxDefaultButton.Button3; }

DialogResult v = MessageBox.Show(this, txtSzoveg.Text, txtCim.Text, gombok, ikon, alap);

lblEredmeny.Text = "Választott gomb: " + v;
lstNaplo.Items.Insert(0, DateTime.Now.ToString("HH:mm:ss") + " – " + gombok + ", " + ikon + " → " + v);

while (lstNaplo.Items.Count > 10)
{
lstNaplo.Items.RemoveAt(lstNaplo.Items.Count - 1);
}
}

private void btnMentetlen_Click(object sender, EventArgs e)
{
switch (MessageBox.Show(this, "Mented a változtatásokat?", "Bezárás", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning))
{
case DialogResult.Yes: tsslUzenet.Text = "Mentve."; break;
case DialogResult.No: tsslUzenet.Text = "Elvetve."; break;
default: tsslUzenet.Text = "Maradunk."; break;
}
}

private void btnTorles_Click(object sender, EventArgs e)
{
bool igen = MessageBox.Show(this, "Törlöd a kijelölt feladatot?", "Feladat törlése", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes;

tsslUzenet.Text = igen ? "Törölve." : "A törlés elmaradt.";
}

private void btnFeluliras_Click(object sender, EventArgs e)
{
DialogResult v = MessageBox.Show(this, "A fájl már létezik. Felülírod?", "Mentés", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);

tsslUzenet.Text = v == DialogResult.OK ? "Felülírva." : "A mentés megszakítva.";
}

private void btnHiba_Click(object sender, EventArgs e)
{
proba = 0;

while (true)
{
proba = proba + 1;

if (proba >= 3) // a szimuláció: a harmadik próbálkozásra sikerül
{
tsslUzenet.Text = "Mentve a " + proba + ". próbálkozásra.";
return;
}

string szoveg = "A fájl nem menthető. Lehet, hogy egy másik program használja." + Environment.NewLine + "Zárd be, majd próbáld újra.";

if (MessageBox.Show(this, szoveg, "Mentés", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Cancel)
{
tsslUzenet.Text = "A mentés megszakítva (" + proba + ". próbálkozás).";
return;
}
}
}
📷 Képernyőkép helye

Mit tegyél ide: az üzenetlabor: a beállítók, az eredmény és a napló néhány sorral.Javasolt fájlnév: winforms-7-4-kesz.webp · Alt szöveg: Az üzenetlabor program

Három önálló gyakorlófeladat

Egyszerre csak egyet csinálj: tervezd meg, írd meg, futtasd, ellenőrizd, és csak utána nyisd ki a megoldást.

1. Kilépés megerősítése

A főablak bezárásakor, ha van mentetlen adat, kérdezzen a program YesNoCancel üzenettel. Hol kezeled, és mit teszel a Mégse eredménnyel?

Egy lehetséges megoldás

A FormClosing eseményben (5.6 lecke), UserClosing esetén. A Mégse és a sikertelen mentés e.Cancel = true értéket ad.

Form1.csC#
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (!modosult || e.CloseReason != CloseReason.UserClosing)
{
return;
}

switch (MessageBox.Show(this, "Mented a változtatásokat?", "Kilépés", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning))
{
case DialogResult.Yes:
if (!Ment()) { e.Cancel = true; }
break;

case DialogResult.No:
break;

default:
e.Cancel = true;
break;
}
}

2. Közös megerősítő metódus

Írj Megerosit(szöveg, cím, veszelyes) metódust, amely a veszélyes műveletnél a Nem gombot teszi alapértelmezetté és Warning ikont használ, a nem veszélyesnél Question ikont és az Igen alapértelmezett. Miért érdemes a metódus?

Egy lehetséges megoldás

A programban egységes marad a viselkedés, és az alapértelmezett gomb szabálya egy helyen van.

Form1.csC#
private bool Megerosit(string szoveg, string cim, bool veszelyes)
{
return MessageBox.Show(this, szoveg, cim, MessageBoxButtons.YesNo,
veszelyes ? MessageBoxIcon.Warning : MessageBoxIcon.Question,
veszelyes ? MessageBoxDefaultButton.Button2 : MessageBoxDefaultButton.Button1) == DialogResult.Yes;
}

3. Üzenet átírása

Írd át három rossz üzenetet jóvá: „Hiba!”, „Biztos vagy benne?”, „Exception at line 87”. Milyen szabályt követsz?

Egy lehetséges megoldás

(1) „A mentés nem sikerült: a lemez tele van. Szabadíts fel helyet, majd próbáld újra.” (2) „Törlöd a kijelölt 3 fájlt? A művelet nem vonható vissza.” (3) „A fájl nem nyitható meg. Ellenőrizd, hogy létezik-e, és nem használja-e másik program.” Mindhárom megmondja, mi történt, és mit tegyen a felhasználó.

Gyakorlótár: 6 további feladat

Három szinten gyakorolhatsz: alap, közepes és kihívás. Csak a próbálkozás után nyisd le a megoldást.

Alap szint

1. Gombok és eredmények

Melyik MessageBoxButtons adhat Retry eredményt?

Megoldás megnyitása

A RetryCancel és az AbortRetryIgnore.

2. Ikon választás

Melyik ikont használod: (a) sikeres telepítés; (b) fájl felülírása; (c) a hálózat nem elérhető?

Megoldás megnyitása

(a) Information; (b) Warning; (c) Error.

Közepes szint

3. A bezáró X eredménye

Mit ad vissza a MessageBox.Show, ha a felhasználó a bezáró X gombra kattint egy YesNo üzenetnél? Hogyan kezeli ezt a kódod?

Megoldás megnyitása

Az X gomb (és az Esc) YesNo gombkészletnél általában nem működik (nincs Mégse gomb), ezért a felhasználónak választania kell. YesNoCancel, OKCancel, RetryCancel esetén az X a Cancel eredményt adja. A kódban a default ág kezelje a biztonságos esetet. A pontos viselkedést a Windows adja, érdemes kipróbálni.

4. Eredmény szövegben

Készíts metódust, amely a DialogResult értéket magyar szöveggé alakítja (Igen, Nem, Mégse…). Melyik szerkezet a legáttekinthetőbb?

Megoldás megnyitása

A switch utasítás.

Form1.csC#
private string Szoveg(DialogResult v)
{
switch (v)
{
case DialogResult.OK: return "OK";
case DialogResult.Cancel: return "Mégse";
case DialogResult.Yes: return "Igen";
case DialogResult.No: return "Nem";
case DialogResult.Retry: return "Újra";
case DialogResult.Abort: return "Megszakítás";
case DialogResult.Ignore: return "Kihagyás";
default: return "(nincs)";
}
}

Kihívás szint

5. Ne kérdezd többet

Egy megerősítő kérdésnél a felhasználó kérheti, hogy a program többet ne kérdezzen. Miért nem lehet ez MessageBox-szal, és hogyan oldod meg saját ablakkal?

Megoldás megnyitása

A MessageBox nem tartalmaz jelölőnégyzetet. Egy saját KerdesForm (7.6 lecke) kell, amelynek van NeKerdezzTobbet tulajdonsága, és a hívó ezt a beállítást megőrzi (Settings).

Form1.csC#
private bool Torles()
{
if (Properties.Settings.Default.NemKerdez)
{
return true; // a felhasználó kérte, hogy ne kérdezzünk
}

using (KerdesForm ablak = new KerdesForm("Törlöd a feladatot?"))
{
bool igen = ablak.ShowDialog(this) == DialogResult.Yes;

if (igen && ablak.NeKerdezzTobbet)
{
Properties.Settings.Default.NemKerdez = true;
Properties.Settings.Default.Save();
}

return igen;
}
}

6. Kivételkezelő segédmetódus

Írj HibaMutat(string mitProbaltal, Exception ex) metódust: a felhasználónak barátságos üzenetet mutat, a technikai részletet egy naplófájlba írja. Hol tartod a kettő határát?

Megoldás megnyitása

A felhasználó a „mit próbáltál” szöveget és egy rövid útmutatót lát, a naplóba a teljes ex.ToString() kerül időponttal (13. fejezet). A naplózás maga is hibázhat, ezért védeni kell.

Form1.csC#
private void HibaMutat(string mitProbaltal, Exception ex)
{
try
{
System.IO.File.AppendAllText("hibak.log", DateTime.Now + " – " + mitProbaltal + Environment.NewLine + ex + Environment.NewLine + Environment.NewLine);
}
catch
{
// a naplózási hiba ne okozzon újabb hibát
}

MessageBox.Show(this, "Nem sikerült: " + mitProbaltal + "." + Environment.NewLine + "A részleteket a hibak.log fájl tartalmazza.", "Hiba", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Gyors önellenőrzés

Válaszolj fejben, és csak utána nyisd le a választ.

1. Mit ad vissza a MessageBox.Show?

Egy DialogResult értéket: azt a gombot, amelyet a felhasználó választott.

2. Miért kell megadni a tulajdonost (this)?

Hogy az üzenet az ablak fölött jelenjen meg, és ne kerüljön más ablak mögé.

3. Mikor legyen a Nem az alapértelmezett gomb?

Veszélyes vagy visszafordíthatatlan műveletnél (törlés, felülírás), hogy egy véletlen Enter ne hajtsa végre.

4. Melyik gombkészlet való mentetlen változtatáshoz?

YesNoCancel: mentés, elvetés vagy marad.

5. Mi egy jó hibaüzenet két része?

Mi történt, és mit tegyen a felhasználó.

6. Mikor ne használj MessageBox-ot?

Nem kritikus visszajelzésnél (állapotsor), mezőhibánál (ErrorProvider), és amikor saját gombfeliratok vagy jelölőnégyzet kell (saját ablak).

7. Mi történik, ha a mentés sikertelen, de nem vizsgálod az eredményt?

Az ablak bezárul a mentetlen adattal. Mindig vizsgáld a mentés eredményét.

Mit tudsz már?

  • Ismered a MessageBox.Show összes paraméterét és a gombkészleteket.
  • A DialogResult értékét feldolgozod, és biztonságos alapértelmezett gombot választasz.
  • Érthető, segítő üzeneteket írsz.
  • Tudod, mikor jobb az állapotsor, az ErrorProvider vagy a saját ablak.
  • Újrapróbálás ciklust és mentetlen változtatás kezelést építesz.

Következő lecke: Form.Show és Form.ShowDialog

Több ablak a programban: nem modális és modális ablakok, a tulajdonos kapcsolat és az ablakok élettartama.