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.







  1. Mi ez a -6, ami a különbség a panel szélessége és a vezérlők között?
  2. Mivel az elemek szélessége csökken, a panel szélessége nem csökken.
  3. Az alsó párnázás 2-szer nagyobb, mint amilyennek lennie kellene.
  4. Nincs vízszintes görgetés, ha túlcsordul a padding miatt.
  5. 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.
  1. 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.

  1. 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.

  1. Az alsó párnázás 2-szer nagyobb, mint amilyennek lennie kellene.
  2. Nincs vízszintes görgetés, ha túlcsordul a padding miatt.
  3. 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.




Kapcsolódó cikkek