Éppen ismerkedem a C#-pal (Linux, mono) és problémáim vannak az ablakok megjelenítésével. Az összes könyvben és az interneten is csak ilyen példákat látok:
private Label label = new Label();
...
label.Size = new System.Drawing.Size( 100, 20 );
label.Location = new System.Drawing.Point( 16, 40 );
label.Text = "Hello";
Ezektől a programoktól engem a hideg ráz ki, elvi okok miatt még begépelni sem merem.
Honnan tudja a program írója, hogy nem 3000x2000-es felbontású monitorom van, 25-ös betűmérettel? És mi van, ha átméretezem az ablakot?
Tudna valaki segíteni, hogyan lehet mindezt C# alatt kultúráltan megoldani (azaz egy darab számot nem akarok látni)? QT-ben számok nélkül megy minden a LayoutManager-ekkel, meg SizePolicy-kkal (hogyan reagáljon az átméretezésre: változatlan, növekszik/csökken). Az ablak méretét is automatikusan kiszámolja a rendszer.
Sajnos nekem az a tapasztalatom, hogy ahányszor eddig valamit fixre állítottam be, mindig volt, akinek a gépén nem jelent meg rendesen...
- 2445 megtekintés
Hozzászólások
Nagyon jó a kérdés. Sajnos a helyes választ nem tudom.
Ha nem direkt a windowsos könyvtárakat akarod tanulni, hanem .NET-et általában akkor használj GTK#-ot. Abban (majdnem) mindent használhatsz, amit GTK-ban.
- A hozzászóláshoz be kell jelentkezni
ahogy az egyik gyakvezem mondta, elég gusztustalan dolog, de ilyen lehetőség nincs
- A hozzászóláshoz be kell jelentkezni
Hat, Windows.Forms eseteben csak korlatozott lehetoseg van a problema megoldasara. Itt is van minimalis LayoutManager, Anchor, Dock, stb.; de nem az igazi.
Ha jol tudom az Mono Olive mar egesz sokat implemental a WPF-bol, amivel -tobbek kozt- ezt a problemat is kikuszoboltek.
- A hozzászóláshoz be kell jelentkezni
Ez nem nyelvfüggő probléma. A System.Windows.Forms-ban (sőt, általában a Windows saját eszközkészletével) automatikusan méreteződő (de ronda szó) elemekkel dolgozni igazi kínszenvedés. Ha már Linux és Mono, akkor tényleg jobban jársz a Gtk#-pal, ráadásul menni fog Windows alatt is, Mono nélkül is, csak a Gtk# runtime-ot kell feltenni.
- A hozzászóláshoz be kell jelentkezni
Köszi a válaszokat. A GTK#-pot átnézem.
Eddig nem volt tiszta, hogy a System.Windows.Forms mellé miért kellett a GTK# is implementálni, de azt hiszem kezdem megérteni.
Feltételeztem, hogy 2008-ban már minden rendszeren LayoutManager-eket használnak.
:-)
- A hozzászóláshoz be kell jelentkezni
Nem mellé. A korai változatokban nem igazán volt SWF implementáció. Az eredeti cél egy az ECMA szerinti osztálykészlet implementálása volt a C#->CIL fordítóval és a CLR-rel (sem a System.Windows, sem a System.Enterprise nem "szabványos"). Persze, jó, ha van egy grafikus felület, erre pedig mind jogi (LGPL), mind programozástechnikai (csak egy wrappert kellett írni, gondolom a Gtkmm alapján készült) szempontból a Gtk volt a legalkalmasabb. (De pl. van Qt# is, csak az nem része a disztribúciónak.)
E mellé jött a SWF implementáció, ami nulláról készült el, az egész menedzselt kód, egyetlen sora sem hivatkozik a Windows könyvtáraira (bár asszem már Win alatt képes a natív widgetek kezelésére). Erre természetesen azért volt szükség, hogy lehetőleg fennakadások nélkül legyen képes futni egy Windowsra írt .NET kód Mono alatt, ami persze azért problémás, mert általában a kutya nem figyel oda amikor VS-ban kódol, hogy pl. a directory-neveket ne "\"-rel válassza el, hanem fűzze össze az erre szolgáló függvénnyel. Bár ez az egész elég sziszifuszi meló, mert ugyebár most már a WPF lesz az alap a windowsos felületek programozásánál (ami végre layout manageren alapul).
- A hozzászóláshoz be kell jelentkezni