Hogyan készítsünk flowlayoutel paneleket általában az orosz verem túlcsordulását
Megpróbálok hozzáadni egy FlowLayoutPanelt az elemek alulról felfelé történő igazításához.
Vagy nem tudom, hogyan kell használni, vagy egyáltalán nem működik.
- Mi ez a -6, ami a különbség a panel szélessége és a vezérlők között?
- Mivel az elemek szélessége csökken, a panel szélessége nem csökken.
- Az alsó párnázás 2-szer nagyobb, mint amilyennek lennie kellene.
- Nincs vízszintes görgetés, ha túlcsordul a padding miatt.
- Azok a részek, amelyek nem illeszkednek a párnázás miatt, kívül esnek a görgetőfelületen. Beleértve a tetejét.
- Mi ez a -6, ami a különbség a panel szélessége és a vezérlők között?
Ez a különbség a Margin beágyazott vezérléseinek köszönhető. Az alapértelmezett értékek minden oldalról 3px.
- Mivel az elemek szélessége csökken, a panel szélessége nem csökken.
Annak érdekében, hogy a panel szélessége megváltoztassa a méretét, be kell állítania az AutoSize tulajdonságot igaznak. és ha azt szeretné, hogy ne csak bővíteni, hanem csökkenjen, akkor az AutoSizeMode tulajdonság AutoSizeMode.GrowAndShrink.
- Az alsó párnázás 2-szer nagyobb, mint amilyennek lennie kellene.
- Nincs vízszintes görgetés, ha túlcsordul a padding miatt.
- Azok a részek, amelyek nem illeszkednek a párnázás miatt, kívül esnek a görgetőfelületen. Beleértve a tetejét.
A párnákkal ez a panel általában csak akkor működik, ha az AutoSize be van kapcsolva, és az AutoScroll le van tiltva. részletek az alábbiakban.
Végül be kell írnom a válasz frissítését. Tehát:
És ha egy kicsit pontosabb, akkor a ScrollableControl örökölte az összes konténervezérlőt. Azok számára, akik mindent meg akarnak nézni, és a rajongók itt a forráskódba kerülnek. Tanulmányokat végeztek a natív .NET-formákon. A Mono-ban a viselkedés eltérő lehet.
Ebben a kiadásban az alábbi panel tulajdonságok érdekelnek: AutoSize. AutoSizeMode. Auto.görgetés. Kitöltés. MaximumSize. Dokk és egymás kölcsönös befolyása, a panel megjelenésére és viselkedésére gyakorolt hatás. Első pillantásra minden egyszerű, de sok csótány van, amely képes sok időt és esetleg idegeket elvinni.
Kezdjük az AutoSize programmal - a dokumentáció szerint, ha engedélyezi ezt a tulajdonságot, akkor a vezérlő mérete a tartalom méretéhez igazodik. Ez a viselkedés bizonyos mértékig szabályozható a MaximumSize és MinimumSize tulajdonságok segítségével. Azt hiszem, nincsenek magyarázatok. És az AutoSizeMode tulajdonság is. amelyek két érték egyikét hozhatják: GrowOnly és GrowAndShrink. Az első esetben a panel növelni fogja az összes tartalmat, de nem csökken, ha a tartalom kisebb, a második esetben a méretváltozás mindkét irányban megtörténik. Ha a Padding tulajdonságot is használja. akkor az elem méretét úgy állítjuk be, hogy illeszkedjen a behúzáshoz. Add hozzá a dokkhoz. kivéve a Fill-et, és újra megkapjuk, amit várunk. A behúzási pontokat figyelembe veszik, a tartalom minden esetben megjelenik, ha be van illesztve panelünk szülői vezérlőjébe.
Ha minden elvárható - miért ilyen sok szöveg? De miért, próbáld meg itt az AutoScrol programot. Ha a MaximumSize tulajdonság nincs beállítva, és az Automatikus méretezés be van kapcsolva. akkor semmi sem fog történni. Általában. Eléggé logikus, hogy miért illeszkedik a csontvázhoz, ha minden megfelel, és így van. Most beállítjuk a MaximumSize-et úgy, hogy a tartalom nem illeszkedik például a magasságba. Megjelenik a görgetések és a csodák kezdete. Az öntvényrúd egyszerre jelenik meg, még akkor is, ha a tartalom szélességben illeszkedik, mert A bekapcsolt függőleges görgetőgörbe csökkenti a panel megjelenített részének szélességét, és a tartalom szélessége szélén megszűnik. És mi van az AutoSize-rel? de semmit sem tud róla a skrolbárokról, és továbbra is kiszámolja a panel szélességét a tartalom szélességében.
További csodálatos. Úgy tűnik, hogy a helyzet a Padding tulajdonság segítségével javítható. Az AutoSize tud róla, és figyelembe veszi. Igen, de csak akkor, ha vertikális görgetés esetén a jobb margót használja. AutoSize' újraszámítja mérete figyelembe, és skrolbar nem ráhelyezve a tartalmat, ami a megjelenése egy második skrolbar, és a behúzás, amikor a behúzás felbontása megfelelő. Adja hozzá a bal oldali margót - minden rendben van, a méretet újra megfelelően számolják. Hozzáadjuk az alsó behúzást - semmi sem történt, mintha nem adnánk hozzá. Oké, ez nem ijesztő, jól, a behúzás eltűnt és a pokolba, a tartalom látható, és gördül. Adja hozzá a felső margót - "Főnök! Minden eltűnt!" A behúzás látható, de pontosan ezen a méretnél a tartalom lefelé haladt, és rejtett, nem enged át a tartalmat, hogy mindenki látható legyen. Ennek megfelelően, ha egy vízszintes görgetősáv van aktív, akkor ugyanaz a hatás lesz a bal oldali behúzás alkalmazásakor. Egy másik érdekes pont, Ha csak a bal margó méretnél nagyobb, mint a szélessége skrolbar, behúzás látható lesz, függőleges skrolbar helyezett a tartalmat, de a vízszintes skrolbar nem jelennek meg A szélesség elegendő a tartalom elhelyezéséhez.
Ennek oka az ilyen csúnya mint kiderült egy forrás (TYK) abban a tényben rejlik, hogy a fordítás az ügyfél terület méretét, figyelembe véve csak az alsó és a jobb margó.
Talán nem feltétlenül felsoroltam a panelek különös behúzási viselkedését, de a probléma általános lényegét próbáltam feltárni.
Magamnak egyszer megtaláltam a kívánt képet, hasznos lehet neked.
Miért van szüksége külső panelre? Itt minden egyszerű, ha a FlowLayoutPanel méretének manuális kiválasztását használja. akkor be kell reagálnia a beágyazott elemek módosítására és az elemek hozzáadására vagy eltávolítására. Külső panel esetén csak a FlowLayoutPanel méretének változását kell figyelnie.