Mi ez a bug c# konzol alkalmazások esetében?
Linuxra készítek egy programot monoval, c#-ban.
Beleütköztem egy hibába amit nem tudok nagyon hová tenni.
Szóval a lényeg, hogy jó pár sor szöveget kiírok a konzolra, utána bekérek egy stringet.
És a probléma ott kezdődik, hogy ha átméretezem a terminált és lenyomom a backspace-t, ahelyett hogy törölne egy karaktert, ahelyett feljebb ugrik a kurzor a már meglévő szövegekhez, és onnan töröl egy karaktert.
Szemléltetés céljából.
for (int i = 0; i < 32; i++)
{
Console.WriteLine("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
}
Console.ReadLine();
Átméretezem a konzolt egy nagyobb méretre, (úgy hogy konzol y tengelye legyen nagyobb) elkezdek beírni valamit,
lenyomom a backspace-t és felugrik pár sort (ez is változó hogy mennyit ugrik fel) és onnan törli a karaktert.
Úgy vettem észre, hogy a probléma akkor jön elő, amikor a konzolnak új mérete lesz, anélkül hogy a felhasználó entert nyomott volna elötte. Ha átméretezem a konzolt, nyomok egy entert, akkor már nem jön elő a probléma. Viszont ha újra átméretezem a konzolt, de nem nyomok entert akkor ugyan úgy elő jön a hiba.
Nem értem a problémát, még nem találkoztam ilyennel, van valami ötletetek? Windows-on nem tapasztaltam ilyen probléma.
#3: Az igazság az, hogy rendszergazdaként dolgozom és az általad említett jelenséggel más programoknál is rendszeresen szoktam találkozni mikor ssh-n mókolok, ezért írtam, hogy ez nem c# bug. :) Viszont más programok teljesen jól lekezelik a terminál ablak átméretezését, ezért biztosan megoldható valahogy, csak nem tudom hogyan.
De lehet félreértelek és nem is arról van szó, amire gondolok. Ha minden igaz, akkor backspace után visszaugrik a kurzor és ahogy törölsz a mögötte lévő szövegrészek ottmaradnak, igaz? Viszont, ha entert nyomsz (és ez valami bemenő karaktersorozat volt), akkor elvileg azt kell látod, hogy valójában a végéből törölt, jól mondom?
Nem, nálam más a hiba.
Nálam így néz ki a dolog:
Ki van írva a terminálra pár szöveg, ahogy észre vettem ezeknek a mennyisége is összefüggésben tud lenni a hibával.
Utána bekér egy parancsot a program. Ha úgy ütöd le a backspace-t, hogy nincs beírva semmi sem a konzolba, akkor nem történik semmi értelemszerűen. Ha azonban bármilyen karaktert(eket) beírtál, és utána ütöd le a backspace-t, akkor gyakorlatilag jó helyről kezdi el kitörölni a karaktereket, csak éppenséggel nem abból a sorból ahol van a kurzor, hanem az a fölöttiekből.
Szóval így néz ki eredetileg:
**Szöveg kiírva a konzolra**
**Szöveg kiírva a konzolra**
**Szöveg kiírva a konzolra**
**Szöveg kiírva a konzolra**
Írjon be egy parancsot:(itt van a kurzor)
És ha beírok valamit, mondjuk azt hogy "parancs", és utána elkezdem kitörölni, akkor ez lesz az eredménye:
**Szöveg kiírva a konzolra bla bla bla bla**
**Szöveg kiírva a konzolra bla bla bla bla**
**Szöveg kiírva a konzo bla bla bla** <= innen törölte ki
**Szöveg kiírva a konzolra bla bla bla bla**
Írjon be egy parancsot:parancs
Itt képletesen a parancs szót próbáltam kitörölni, de a szóban lévő 7 karaktert nem onnan törölte ki ahol eredetileg volt a kurzor, vagyis a parancs szó után, hanem felugrott pár sort (ez is változó hogy mennyi ugrik fel) és onnan kezdte el kitörölni a szöveget.
Érdekes hogy ha a terminál magasságát nem állítom, csak a szélességét, akkor nem jön elő a hiba. Illetve ha nyomok egy entert, miután átméreteztem a konzolt akkor sem jön elő a hiba. És azzal is összefüggésben van hogy mennyi szöveg van eredetileg kiírva a konzolra.
Ha nincs kiírva semmi sem, vagy maximum 3-4 sor, akkor sem jön elő a hiba.
**csak egy sor szöveg**
Írjon be egy parancsot:parancs <= most jó helyről fogja kitörölni a szöveget, nem fog elugrani a kurzor.
Amúgy ez a dolog azért is idegesítő, mert a kurzort fel-le alapból sem tudná az ember mozgatni ugye, csak enter lenyomásával ugrana lejjebb eggyel a kurzor.
80:24-re van alapértelmezetten a terminál, esetleg console.setcursoral oda vissza tudod helyezni.
Nekem is sikerült megcsinálni amit itt irtàl, valamiért elveszti a kurzor a pozicióját, amúgy ha nem méretezgeted akkor jó lesz.
beállítod nagyobb értékekre az sorok oszlopok számát.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!