Grafikus C# – Windows Forms tanfolyam › 7.3 lecke Windows Forms · 7.3 lecke · állapotsor Az ablak alján lévő állapotsor a program „közérzetét” mutatja: mit csinál éppen, hol áll a kurzor, mentve van-e a dokumentum, fut-e egy hosszú művelet. Jól használva csendes visszajelzés, amely nem zavarja a munkát, mint egy felugró ablak. Ebben a leckében megtanulod a StatusStrip és alkalmazásállapot
StatusStrip elemeit, a tartós és az ideiglenes üzenetek kezelését, a sor és oszlop kiírását szerkesztőben, a billentyű-állapotokat és az órát, a haladásjelzőt, és azt is, mikor nem elég az állapotsor.
A lecke végére
- használod a
StatusStripelemeit (ToolStripStatusLabel,ToolStripProgressBar, legördülő gomb) és aSpringtulajdonságot; - megkülönbözteted a tartós információt és az ideiglenes üzenetet, és az utóbbit időzítővel törlöd;
- kiírod a sor- és oszlopszámot, a karakterszámot és a módosítás jelzést;
- követed a billentyű-állapotot (
Caps Lock) és kiírod az órát; - haladásjelzőt mutatsz hosszabb műveletnél;
- tudod, mikor kell az állapotsor mellé felugró ablak vagy hibajelzés.
Mielőtt elkezded
Ehhez a leckéhez a 7.1 lecke (ToolStrip elemek), az 1.8 lecke (Timer, ProgressBar), a 2.11 lecke (SelectionChanged) és a 6.2 lecke (Dock) szükséges.
A StatusStrip elemei
A StatusStrip alapból Dock = Bottom értékű, és ToolStripItem elemeket tartalmaz (7.1 lecke). Az állapotsor elemei nem kapnak fókuszt, nem a billentyűzet felé szólnak, hanem tájékoztatnak.
| Elem | Jelentése |
|---|---|
ToolStripStatusLabel | Szöveges (és képes) mező. Spring = true: kitölti a szabad helyet; BorderSides, BorderStyle: elválasztó keret; IsLink: kattintható hivatkozás. |
ToolStripProgressBar | Haladásjelző (Value, Maximum, Style: Continuous, Marquee). |
ToolStripDropDownButton, ToolStripSplitButton | Legördülő menü az állapotsorban (például nagyítás, kódolás). |
// tervezőben: StatusStrip → elemek hozzáadása a nyíllal (Add Item); kódból:
ToolStripStatusLabel tsslUzenet = new ToolStripStatusLabel("Kész");
tsslUzenet.Spring = true; // kitölti a helyet
tsslUzenet.TextAlign = ContentAlignment.MiddleLeft;
ToolStripStatusLabel tsslPoz = new ToolStripStatusLabel("Sor 1, oszlop 1");
tsslPoz.BorderSides = ToolStripStatusLabelBorderSides.Left; // vékony elválasztó balra
ss.Items.Add(tsslUzenet);
ss.Items.Add(tsslPoz);Spring = true, a többi elem után megmaradó összes helyet elfoglalja. Egy állapotsorban általában egyetlen ilyen van (az üzenetmező), a többi AutoSize.AutoSize = false, Width beállítása), és igazítsd jobbra vagy középre.SizingGrip tulajdonsága egy kis fogantyút tesz a jobb alsó sarokba az ablak átméretezéséhez. Rögzített méretű ablaknál kapcsold ki.ToolTipText (és ShowItemToolTips) használható, de a fontos üzenetet ne bízd az állapotsorra.Jósolj!
Az állapotsorban három címke van: az üzenet (Spring = true), a pozíció és a karakterszám (mindkettő AutoSize). A pozíció szövege Sor 9, oszlop 9-ről Sor 10, oszlop 10-re változik. Mi történik az elemek helyével?
Jóslat ellenőrzése
A hosszabb szöveg miatt a pozíció elem kicsit szélesebb lesz, az üzenetmező (Spring) pedig ugyanennyivel keskenyebb: a szöveg ugrál. Egy fix szélességű (AutoSize = false) elem megakadályozza ezt.
Tartós és ideiglenes üzenetek
Az állapotsor kétféle információt hordoz:
Tartós információ
Állandóan igaz, a program állapotát tükrözi: pozíció, módosítás jelzés, nagyítás, bejelentkezett felhasználó. Külön, fix mezőben áll, és az állapot változásakor frissül.
Ideiglenes üzenet
Egy esemény visszajelzése: „Mentve 14:32”, „3 találat”. Néhány másodpercig látszik, utána visszaáll az alaphelyzetre (Kész). Időzítővel töröljük.
private const string Alap = "Kész";
private void Uzen(string szoveg)
{
tsslUzenet.Text = szoveg;
tmrUzenet.Stop(); // az újabb üzenet újraindítja a számlálást
tmrUzenet.Start();
}
private void tmrUzenet_Tick(object sender, EventArgs e)
{
tmrUzenet.Stop();
tsslUzenet.Text = Alap;
}
private void miMent_Click(object sender, EventArgs e)
{
// ... mentés ...
Uzen("Mentve: " + DateTime.Now.ToString("HH:mm:ss"));
}Stop és Start újraindítja a számlálást.Jósolj!
Az Uzen nem állítja le az időzítőt újraindítás előtt (nincs Stop/Start). 3 másodperccel az első üzenet után egy második üzenet érkezik, az időzítő 4 másodperces. Mikor törlődik a második üzenet?
Jóslat ellenőrzése
Az időzítő tovább fut az első üzenettől, ezért a második üzenet már 1 másodperc múlva törlődik (az első üzenet kezdetétől számított 4. másodpercben). Az újraindítás (Stop + Start) biztosítja, hogy a második üzenet a saját 4 másodpercét megkapja.
A szerkesztő állapota: sor, oszlop, karakterszám
Szövegszerkesztőnél a kurzor helye (sor és oszlop), a karakterszám és a módosítás jelzés a klasszikus állapotsor-tartalom. A RichTextBox metódusaival számolható:
private void PozFrissit()
{
int kezdet = rtbSzoveg.SelectionStart;
int sor = rtbSzoveg.GetLineFromCharIndex(kezdet) + 1;
int sorElsoKarakter = rtbSzoveg.GetFirstCharIndexOfCurrentLine();
int oszlop = kezdet - sorElsoKarakter + 1;
tsslPoz.Text = $"Sor {sor}, oszlop {oszlop}";
if (rtbSzoveg.SelectionLength > 0)
{
tsslKarakter.Text = $"{rtbSzoveg.SelectionLength} kijelölve / {rtbSzoveg.TextLength}";
}
else
{
tsslKarakter.Text = $"{rtbSzoveg.TextLength} karakter";
}
}
private void rtbSzoveg_SelectionChanged(object sender, EventArgs e)
{
PozFrissit(); // a kurzor mozgásakor és gépeléskor is lefut
}
private void ModositasJelzes(bool modosult)
{
tsslModosult.Text = modosult ? "● Módosítva" : "✔ Mentve";
}TextChanged csak a szöveg változásakor.WordWrap esetén a GetLineFromCharIndex a megjelenített sort adja (a tördelt sor új sor), nem a bekezdés számát. Kikapcsolt tördelésnél a sorok megegyeznek a Enter billentyűvel kezdett sorokkal.TextLength gyors, a Text.Length nagy dokumentumnál másolja a szöveget; előbbit használd.Jósolj!
A WordWrap igaz, a szerkesztő keskeny. Egy egyetlen bekezdésből álló, hosszú szövegnél a kurzor a második megjelenített sor elején áll. Mit ír ki a program sorként?
Jóslat ellenőrzése
A 2. sort (és 1. oszlopot): a GetLineFromCharIndex a megjelenített, tördelt sorokat számolja, bár a szövegben nincs sortörés. Ha bekezdés-sorszám kell, a Text új sorainak számolása szükséges (Lines tömb), de nagy szövegnél lassú.
Haladásjelző, billentyű-állapot, óra
// óra és billentyű-állapot: másodpercenként frissül
private void tmrOra_Tick(object sender, EventArgs e)
{
tsslIdo.Text = DateTime.Now.ToString("HH:mm:ss");
tsslCaps.Text = Control.IsKeyLocked(Keys.CapsLock) ? "CAPS" : "";
}
// haladásjelző: a művelet idejére látszik
private void MuveletIndit()
{
tspbHaladas.Value = 0;
tspbHaladas.Visible = true;
tsslUzenet.Text = "Feldolgozás...";
tmrMuvelet.Start();
}
private void tmrMuvelet_Tick(object sender, EventArgs e)
{
tspbHaladas.Value = Math.Min(tspbHaladas.Maximum, tspbHaladas.Value + 5);
if (tspbHaladas.Value >= tspbHaladas.Maximum)
{
tmrMuvelet.Stop();
tspbHaladas.Visible = false;
Uzen("A feldolgozás kész.");
}
}
// ismeretlen hosszúságú műveletnél: Marquee (a sáv mozog, nem mutat százalékot)
tspbHaladas.Style = ProgressBarStyle.Marquee;Control.IsKeyLocked(Keys.CapsLock) (és NumLock, Scroll) a billentyű aktuális állapotát adja. Nincs rá esemény, ezért időzítővel vagy a KeyUp eseményben kérdezzük.Timer szimulálja a munkát: a valódi hosszú műveletet (ciklus, fájl) a 11. fejezet tanítja úgy, hogy az ablak ne fagyjon le. A hosszú ciklus közben a haladásjelző nem frissül.Marquee stílus mozgó sávot mutat, százalék nélkül.Jósolj!
Egy gomb kezelőjében egy másodpercnyi számítást végzel for ciklussal, és a ciklusban növeled a tspbHaladas.Value értékét. Mit látsz a haladásjelzőn a számítás alatt?
Jóslat ellenőrzése
A sáv nem mozog, az ablak lefagyottnak tűnik, és csak a művelet végén ugrik a végállapotba (vagy az utolsó értékre): a kezelő addig nem engedi vissza a vezérlést a felületnek, amíg le nem fut. A valódi hosszú műveletekhez háttérszál vagy async kell (11. fejezet). Ebben a leckében a Timer csak a szemléltetést szolgálja.
Mit tegyél ide: egy szerkesztő állapotsora: üzenet, sor és oszlop, karakterszám, CAPS jelzés, mentés állapot és óra.Javasolt fájlnév: winforms-7-3-allapotsor.webp · Alt szöveg: Szerkesztő állapotsora több elemmel
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 állapotsor elemei ugrálnak
A pozíció szövegének változásakor a többi elem elmozdul. Az Ok és javítás
AutoSize elem a szöveghez igazodik. Állíts be fix szélességet (AutoSize = false, Width), jobbra vagy középre igazítva.
2. Az üzenet eltűnik, mielőtt elolvasnám
Gyors egymás utáni üzeneteknél a második azonnal eltűnik. Az időzítőt nem indítod újra az új üzenetnél. Hívd a Ok és javítás
Stop() és Start() metódust az Uzen elején.
3. A haladásjelző nem mozog a ciklusban
for (int i = 0; i <= 100; i++)
{
tspbHaladas.Value = i;
Thread.Sleep(30); // a felület nem frissül
}Hiba és javítás
A felület szála a ciklusban dolgozik, ezért nem rajzol újra. A hosszú műveletet háttérszálra vagy async metódusra kell tenni (11. fejezet), addig a Timer alapú szimuláció használható.
4. A Caps Lock jelzés késik
A CAPS felirat csak másodpercek múlva változik a billentyű megnyomása után. Az óra időzítője (1 másodperc) frissíti. Kérdezd le a Ok és javítás
KeyUp eseményben is (KeyPreview = true), vagy rövidítsd az időzítő intervallumát (250 ms).
5. Hibaüzenet csak az állapotsorban
A felhasználó nem veszi észre, hogy a mentés nem sikerült. Az állapotsor csendes: a fontos, azonnali beavatkozást kívánó hibát Ok és javítás
MessageBox vagy ErrorProvider jelezze (7.4 lecke), az állapotsor csak kiegészítés. A képernyőolvasó sem olvassa automatikusan az állapotsor változását.
6. Az állapotsor eltakarja a szerkesztőt
A szerkesztő alja nem látszik. A z-sorrend rossz (6.2 lecke): a Ok és javítás
Fill szerkesztő legyen leghátul (Send to Back), hogy utoljára kapja a maradék helyet.
Mini projekt: szerkesztő gazdag állapotsorral
Egészítsd ki a 7.1 jegyzetfüzetet állapotsorral:
- A
ss(StatusStrip) elemei:tsslUzenet(Spring),tsslPoz(fix 130 szélesség),tsslKarakter(fix 150),tsslCaps,tsslModosult,tsslIdo,tspbHaladas(alapból rejtett). - A
Uzen(szöveg)metódus 4 másodperces ideiglenes üzenetet mutat, majd Kész szöveget. - A pozíció és karakterszám a
SelectionChangedeseményben frissül; a módosítás jelzés a szöveg változásakor ● Módosítva, mentés után ✔ Mentve. - Az óra és a CAPS jelzés egy 500 ms-os időzítőn frissül.
- A Szavak számolása gomb elindítja a haladásjelzőt: 3 másodperc alatt telik be (szimuláció), a végén Szavak: N üzenet.
- A mentésnél, megnyitásnál és a hibáknál az állapotsor üzen (Mentve: 14:32:05, Megnyitva: jegyzet.txt), a fájl hibája
MessageBox(7.4 lecke). - Teszteld: a pozíció a nyilakkal, tördelés be- és kikapcsolva, kijelölés, gyors üzenetek egymás után, CAPS be- és kikapcsolása, a haladásjelző.
Megoldás megnyitása (próbáld ki előbb önállóan!)
A szószámolás a Split módszerével történik. Az üzenetek közös Uzen metóduson át érkeznek, hogy az időzítő egy helyen legyen kezelve.
private const string Alap = "Kész";
private void Form1_Load(object sender, EventArgs e)
{
tmrUzenet.Interval = 4000;
tmrOra.Interval = 500;
tmrOra.Start();
tspbHaladas.Visible = false;
tspbHaladas.Maximum = 100;
tsslUzenet.Text = Alap;
PozFrissit();
ModositasJelzes(false);
tmrOra_Tick(this, EventArgs.Empty);
}
private void Uzen(string szoveg)
{
tsslUzenet.Text = szoveg;
tmrUzenet.Stop();
tmrUzenet.Start();
}
private void tmrUzenet_Tick(object sender, EventArgs e)
{
tmrUzenet.Stop();
tsslUzenet.Text = Alap;
}
private void tmrOra_Tick(object sender, EventArgs e)
{
tsslIdo.Text = DateTime.Now.ToString("HH:mm:ss");
tsslCaps.Text = Control.IsKeyLocked(Keys.CapsLock) ? "CAPS" : "";
}
private void PozFrissit()
{
int kezdet = rtbSzoveg.SelectionStart;
int sor = rtbSzoveg.GetLineFromCharIndex(kezdet) + 1;
int oszlop = kezdet - rtbSzoveg.GetFirstCharIndexOfCurrentLine() + 1;
tsslPoz.Text = $"Sor {sor}, oszlop {oszlop}";
tsslKarakter.Text = rtbSzoveg.SelectionLength > 0
? $"{rtbSzoveg.SelectionLength} kijelölve / {rtbSzoveg.TextLength}"
: $"{rtbSzoveg.TextLength} karakter";
}
private void rtbSzoveg_SelectionChanged(object sender, EventArgs e)
{
PozFrissit();
}
private void ModositasJelzes(bool modosult)
{
tsslModosult.Text = modosult ? "● Módosítva" : "✔ Mentve";
}
private void rtbSzoveg_TextChanged(object sender, EventArgs e)
{
modosult = true;
ModositasJelzes(true);
CimFrissit();
}
// a mentés végén: modosult = false; ModositasJelzes(false); Uzen("Mentve: " + DateTime.Now.ToString("HH:mm:ss"));
private int cel = 0;
private void btnSzavak_Click(object sender, EventArgs e)
{
tspbHaladas.Value = 0;
tspbHaladas.Visible = true;
btnSzavak.Enabled = false;
tsslUzenet.Text = "Szavak számolása...";
tmrMuvelet.Interval = 100;
tmrMuvelet.Start();
}
private void tmrMuvelet_Tick(object sender, EventArgs e)
{
tspbHaladas.Value = Math.Min(100, tspbHaladas.Value + 3); // kb. 3 másodperc
if (tspbHaladas.Value >= 100)
{
tmrMuvelet.Stop();
tspbHaladas.Visible = false;
btnSzavak.Enabled = true;
string[] szavak = rtbSzoveg.Text.Split(new char[] { ' ', '\n', '\r', '\t' }, StringSplitOptions.RemoveEmptyEntries);
Uzen("Szavak: " + szavak.Length);
}
}Mit tegyél ide: a kész szerkesztő állapotsora a haladásjelzővel, a pozícióval és az órával.Javasolt fájlnév: winforms-7-3-kesz.webp · Alt szöveg: A szerkesztő állapotsora haladásjelzővel
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. Nagyítás az állapotsorban
Az állapotsor A legördülő pontok ToolStripDropDownButton eleme a szöveg nagyítását (100%, 125%, 150%) választja, és a RichTextBox.ZoomFactor értékét állítja. Hogyan oldod meg közös kezelővel?Egy lehetséges megoldás
Tag értéke a tényező (1.0, 1.25, 1.5), a közös kezelő a gomb szövegét is frissíti.private void Nagyitas_Click(object sender, EventArgs e)
{
ToolStripMenuItem pont = (ToolStripMenuItem)sender;
float tenyezo;
if (float.TryParse(pont.Tag.ToString(), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out tenyezo))
{
rtbSzoveg.ZoomFactor = tenyezo;
ddbNagyitas.Text = pont.Text;
}
}
2. Kattintható hivatkozás az állapotsorban
Egy Az ToolStripStatusLabel Súgó felirat hivatkozásként viselkedik, és megnyitja a súgóoldalt. Mely tulajdonságokat és eseményt használod?Egy lehetséges megoldás
IsLink = true hivatkozás-kinézetet ad, a Click esemény kezeli a kattintást. A böngésző indítása Process.Start (a modern .NET-ben UseShellExecute = true kell). Külső cím esetén az URL-t ellenőrizd.private void tsslSugo_Click(object sender, EventArgs e)
{
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("https://www.digitalisfelfedezok.hu/");
info.UseShellExecute = true;
System.Diagnostics.Process.Start(info);
}
3. Állapot-összesítés lista
A Feladatlista (7.2) állapotsora mutassa: 12 feladat, 5 kész (42%). Hol frissíted, hogy mindig naprakész legyen? Egy Egy lehetséges megoldás
Frissit() metódus számolja ki, és mindenhonnan meghívod, ahol a lista változik (hozzáadás, törlés, kész-váltás). Az osztás előtt ellenőrizd a nullát.private void Frissit()
{
int osszes = lstFeladatok.Items.Count;
int kesz = 0;
foreach (object o in lstFeladatok.Items)
{
if (((Feladat)o).Kesz) { kesz++; }
}
int szazalek = osszes == 0 ? 0 : (int)Math.Round(100.0 * kesz / osszes);
tsslOsszes.Text = $"{osszes} feladat, {kesz} kész ({szazalek}%)";
}
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. Spring
Mit tesz a A címke kitölti az állapotsor szabad helyét, a többi elemet jobbra szorítja.Spring = true egy ToolStripStatusLabelen?Megoldás megnyitása
2. Tartós és ideiglenes információ
Sorold a következőket tartós vagy ideiglenes kategóriába: „Sor 5”, „Mentve 14:32”, „Módosítva”, „3 találat”. Tartós: „Sor 5”, „Módosítva” (az állapotot tükrözik). Ideiglenes: „Mentve 14:32”, „3 találat” (eseményekre válaszolnak, majd törlődnek).Megoldás megnyitása
Közepes szint
3. Elemek elrejtése szűk ablaknál
Szűk ablakban az óra és a karakterszám elrejtődik, hogy a pozíció elférjen. Melyik eseményben? A Megoldás megnyitása
Resize eseményben, az ablak szélessége alapján (6.1 lecke). A rejtett elem nem foglal helyet.private void Form1_Resize(object sender, EventArgs e)
{
bool szeles = this.ClientSize.Width >= 600;
tsslIdo.Visible = szeles;
tsslKarakter.Visible = szeles;
}
4. Az egér alatti elem leírása
A menüpontok és eszköztár-gombok fölé mutatva az állapotsor a gomb leírását mutassa (Az aktuális dokumentum mentése). Melyik eseményt használod? A Megoldás megnyitása
MouseEnter és MouseLeave eseményeket egy közös kezelővel, a ToolTipText (vagy Tag) szövegével.private void Elem_MouseEnter(object sender, EventArgs e){
tsslUzenet.Text = ((ToolStripItem)sender).ToolTipText;
}
private void Elem_MouseLeave(object sender, EventArgs e)
{
tsslUzenet.Text = Alap;
}
Kihívás szint
5. Naplózó állapotsor
Az állapotsor utolsó 20 üzenetét egy listában őrizd, és az állapotsor Előzmények gombja egy Az ContextMenuStrip menüben mutassa. Hogyan építed?Megoldás megnyitása
Uzen egy List<string>-be is ír (legfeljebb 20), és az Opening események a menüpontok szövegét frissítik (7.2 lecke).private readonly List<string> elozmenyek = new List<string>();
private void Uzen(string szoveg)
{
tsslUzenet.Text = szoveg;
elozmenyek.Insert(0, DateTime.Now.ToString("HH:mm:ss") + " – " + szoveg);
while (elozmenyek.Count > 20)
{
elozmenyek.RemoveAt(elozmenyek.Count - 1);
}
tmrUzenet.Stop();
tmrUzenet.Start();
}
private void cmsElozmeny_Opening(object sender, System.ComponentModel.CancelEventArgs e)
{
cmsElozmeny.Items.Clear();
foreach (string s in elozmenyek)
{
cmsElozmeny.Items.Add(s);
}
e.Cancel = elozmenyek.Count == 0;
}
6. Üzenet fontossága
Az Az info és a figyelmeztetés időzítővel eltűnik, a hiba nem indítja az időzítőt, és a következő üzenet vagy egy művelet törli. A szín sötét árnyalat (6.9 lecke), a jel a szöveg része.Uzen metódus kapjon fontosság paramétert (info, figyelmeztetés, hiba): jellel (ℹ, ⚠, ✖) és színnel is jelezze, a hiba maradjon látható, amíg a felhasználó nem cselekszik. Hogyan oldod meg?Megoldás megnyitása
private void Uzen(string szoveg, string szint){
tmrUzenet.Stop();
switch (szint)
{
case "hiba":
tsslUzenet.Text = "✖ " + szoveg;
tsslUzenet.ForeColor = Color.FromArgb(170, 20, 20);
return; // nem tűnik el magától
case "figyelmeztetes":
tsslUzenet.Text = "⚠ " + szoveg;
tsslUzenet.ForeColor = Color.FromArgb(150, 80, 0);
break;
default:
tsslUzenet.Text = "ℹ " + szoveg;
tsslUzenet.ForeColor = SystemColors.ControlText;
break;
}
tmrUzenet.Start();
}
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ. A címke kitölti az állapotsor szabad helyét. A tartós az állapotot tükrözi (pozíció, módosítás), az ideiglenes egy esemény visszajelzése, időzítővel eltűnik. Hogy az újabb üzenet a saját teljes idejét megkapja, és az előző időzítő ne törölje korán. A ciklus lefoglalja a felület szálát, nincs újrarajzolás. Háttérszál vagy Fontos hibánál, amely azonnali beavatkozást kér: 1. Milyen elemek vannak az állapotsorban?
ToolStripStatusLabel, ToolStripProgressBar, ToolStripDropDownButton, ToolStripSplitButton.2. Mit jelent a Spring?
3. Mi a különbség a tartós és az ideiglenes információ között?
4. Miért kell Stop és Start az Uzen metódusban?
5. Hogyan számolod a sort és az oszlopot?
GetLineFromCharIndex(SelectionStart) a sor, SelectionStart - GetFirstCharIndexOfCurrentLine() az oszlop (+1). Tördelésnél a sor a megjelenített sor.6. Miért nem mozog a haladásjelző egy ciklusban?
async kell (11. fejezet).7. Mikor nem elég az állapotsor?
MessageBox vagy ErrorProvider. A képernyőolvasó sem olvassa automatikusan.
Mit tudsz már?
- Használod a
StatusStripelemeit és aSpringtulajdonságot. - Tartós és ideiglenes üzeneteket kezelsz közös
Uzenmetódussal. - Kiírod a sort, oszlopot, karakterszámot, módosítás jelzést, órát és billentyű-állapotot.
- Haladásjelzőt mutatsz, és tudod a hosszú művelet korlátját.
- Tudod, mikor kell az állapotsor mellé felugró üzenet.
Következő lecke: MessageBox különböző gombjai és DialogResult
A felugró üzenetek helyes használata: gombok, ikonok, alapértelmezett gomb, és az érthető üzenetek szabályai.



