C# form maximize

Indította ktomi, 2015 január 07, 12:18:47 DÉLELŐTT

Előző téma - Következő téma

ktomi

Üdv!

Elkezdtem C#-ban csinálgatni egy kis programot, panelekre pakoltam mindent. A kérdésem pedig az lenne, hogyan lehetne megoldani azt, hogy ha az ablakot felnagyítom akkor ne így nézzen ki: http://kepfeltoltes.hu/150107/teszt2_www.kepfeltoltes.hu_.jpg
hanem az ablakkal együtt növelje a panel tartalmát is? (panel: Dock=fill - szóval a panel az felveszi a megfelelő méretet csak a tartalma nem. Autosize, Anchorral is szenvedtem már, de legfeljebb pofán vágott két hatalmas button-el...)
Összegezve azt szeretném elérni, hogy az ablak tartalma teljes méretnél is az általam elrendezett módon nézzen ki: http://kepfeltoltes.hu/150107/teszt1_www.kepfeltoltes.hu_.jpg

A válaszokat előre is köszönöm!

kagebunshin

Üdv!

Ha jól sejtem winform-os alkalmazásról van szó. Amennyire én tudom erre az a bevett eljárás, hogy feliratkozol a form ResizeEnd eseményére majd újraszámolod az elhelyezett elemek helyét és méretét. Ez szerintem nem túl kényelmes megoldás.

Ha még csak nem rég kezdtél el foglalkozni vele akkor javaslom próbáld meg wpf-be. A programozási nyelv maradhat c# én is abban használom. Az előnye a winformmal szemben, hogy a grafikus felületek leírására egy html-hez hasonló nyelvet használ az xaml-t. Ebben nem csak a te problémád oldható meg könnyebben hanem számtalan előnnyel rendelkezik, amiknek a használatát el kell sajátítani. Én mindenesetre nem bántam meg hogy váltottam rá.

Természetesen ha ebben szeretnéd folytatni és nem elég / nem érthető amit fentebb írtam kifejtem bővebben.
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

ktomi

Igen winformos alkalmazás.
Köszönöm a válaszod, ResizeEnd eseménnyel működne a dolog, csak még arra nem jöttem rá, hogy hogyan számolja ki automatikusan(foreach (Control x in fo_panel.Controls) - el próbálkoztam, de még nem jött össze rendesen...) az elemek új méretét és pozícióját, hogy szépen rendezze.
Ha esetleg erre is lenne ötleted, azt nagyon megköszönném! :)

Még nem próbálkoztam wpf-el, de ha azt mondod, hogy az jobb akkor kipróbálom, de a jelenlegi projektemben már elég sok munka van, szóval ezt szeretném előbb befejezni. :)

kagebunshin

Sajnos a ResizeEnd-nek ez a hátránya hogy nem igazán lehet automatizálni. Hacsak nincs egy előre megírt segédlet vagy nem írjuk meg mi magunk. Tehát elemenként egyesével kell elvégezni attól függően, hogy milyen viselkedést várunk el tőle. Van ahol csak a helyzetét kell változtatni, van ahol csak a méretet vagy elég csak a szélesség vagy a magasság, persze az is megeshet, hogy mindent.

pl.:
button1.Location = new Point(panel1.Width / 2 - button1.Width / 2, panel1.Height / 2 - button1.Height / 2);


Ezzel adott gombot adott panel közepére tudsz helyezni. Ugye a panelt a form méretéhez igazítja és az ő majd a gomb méreteinek segítségével tudod adott helyre pozicionálni. Látom van pár GroupBox is, azok picit megkönnyítik a munkát.

Több elem esetén át kell gondolni, hogy mit akarunk és sokszor a sorrend is döntő. Arról nem is beszélve ha utólag új elemet szeretnénk elhelyezni vagy épp az egészet át kell alakítani valami miatt. Ami jelen esetben valahogy így nézni ki:
-A project státuszt szélesség szerint középre igazítod.
-Az "A" (gondolom egy kép) adott távolságra teszed a panel szélétől
-A bejelentkezésnél a szélességét megnöveled a panel szélességének felére - margó távolság.
-A regisztráció szélességét megnöveled a bejelentkezés helye + szélessége + margó, a mérete megegyezik a bejelentkezés szélességével.

És ugyanezt a gondolatmenetet eljátszani a groupboxokon belül.
Nagy hátránya még ennek a megoldásnak, hogy egyszerre kell kódot és a beépített grafikus fejlesztőt használni, illetve sokszor kell leforgatni tesztelni a progit, hogy minden elem oda kerül-e ahova szeretnénk.

Természetesen wpf-ben sem lehet egy csettintéssel megoldani és vannak olyan elrendezési módok amiket abba sem egyszerű.

Én is egy komolyabb projectem közbe váltottam pont hasonló okok miatt és sok idő elment mire úgy ahogy megtanultam a wpf-et. Az meg egy külön rémálom volt mire a winformos projectet átalakítottam wpf-re.

U.I.: Még az jutott eszembe. Ha nem szeretnél az átméretezéssel foglalkozni, akkor a formot átméretezhetetlenné teheted. A formborderstyle tulajdonságát átállítod fixedsingle-re, a maximizebox értékét pedig false-ra. Addig is körbenézek hátha van már winform-ba is emberibb megoldása ennek a problémának.
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

ktomi

Hát eddig fix volt az ablak, kikapcsolva a teljes méret. De szerintem marad is így, és csak 1-2 fontosabb panelnél csinálom meg az újraméretezést. (Így talán nem megy rá fél életem...   :D)
Minden esetre, nagyon szépen köszönöm a segítséged! :)

Powered by EzPortal