Diskuze: C# kontrolka pro roztahovací panel
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 12 zpráv z 12.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Toto se mi příliš nelíbí. Vypadá to jenom jako nové okénko. Není to komponenta na formuláři, která může mít vlstnost Dock nastavenou na Right a mít v sobě další komponenty. Něco takového potřebuji, aby mi obsah té roztahovací komponenty mohl díky roztahování vytlačit obsah dalších komponent (které mají Dock nastaveno na fill). Nové okno by zdrojový kód spíše překrývalo. To mi nepřijde příliš příjemné.
Když jsem zkoušel svojí vlastní implementaci, tak po celém dni programování jsem zjistil, že to v žádném případě není triviální problém.
1. Měnit velikost komponenty za běhu programu nepodporují Winformy nijak
příjemně. Jediná možnost je změnit Size, což je struktura, která se
musí měnit celá. Někde jsem našel zmíňky o tom, že to pravděpodobně
není "clean" způsob, jak to dělat. Ale navrhovaný "clean" způsob byl zase
používání nalinkovaných unsafe metod posíláním zpráv kontrolkám.
Přiznám se, že jsem to příliš nepochopil:
http://stackoverflow.com/…l-at-runtime
2. Pokud nastavím, aby se update prováděl neustále na mousemove, tak i když nastavím panel na doublebuffered, tak mi nepříjemně bliká celý formulář. Nastavil jsem tedy, aby se update provedl jen jednou po puštění tlačítka myši.
3. Když dám Fill nové komponenty, kterou dám do mého valstního panelu, tak se mi moje zvýrazněná hrana panelu, stejně jako všechno ostatní, překryje.
4. Jaké bylo překvapení, že výsledný panel, který jsem si napsal, vlastně nemůžu vůbec použít. Pokud do něj dám nějakou komponentu a nastavím jí Dock na Fill, tak všechny eventy, které odchytával panel jsou nyní ignorovány, protože když se myš nachází nad panelem tak se odchytávají pouze eventy které jsou vyvolány to novou komponentou, kterou jsem do panelu umístil.
Takže můj panel je ošklivý a funguje pochybně a funguje pouze když je prázdný... Jediná možnost jak to obejít je pravděpodobně ta, že bych si vytvořil místo panelu vlastní roztahovací treeview a textbox... a další komponenty. Sice budu mít velké množstí opakujícího se kódu, ale v tuhle chvíli mi nic lepšího nenapadá.
Když v .NETu něco není, tak by ses měl zamyslet i nad tím, jestli to opravdu potřebuješ, protože je divné, že by tam něco užitečného chybělo a nedalo se to realizovat nějakým jiným způsobem přes existující funkcionalitu. Ale stát se to může.
Stejně jako Honza si myslím, že pokud tu funkčnost opravdu chceš, není složité si ji naprogramovat. Dej si to do nějakého panelu a tomu obsluž události pohybu myší a držení tlačítka tak, aby se dal roztahovat.
Jinak pokud chceš takovéhle obskurnosti, tak to máš lepší dělat ve WPF, WinForms je už jen z podstaty zastaralý.
Mám pocit, že si trochu protiřečíš. Není divné, že by tam něco důležitého chybělo, pokud je WinForms zastaralý. Projekt je už ale rozběhnutý ve Winforms a některé jeho důležité komponenty které musím použít mám jen pro winforms.
A musím se odkázat na svůj předchozí příspěvek. Je nemožné obloužit událost roztahování, protože kontainer jiných komponent pak ignoruje události, pokud jsou vyvolány nad těmito dalšími komponentami. Pokud dám na svůj upravený panel tlačítko, tak pokud nad talčítkem přejíždím myší, tak mousemove panelu se nikdy nezavolá.
Teď jsem narychlo vyzkoušel tuhle funkcionalitu dát rovnou TreeView, ale marně. Z nějakého důvodu, přesto, že mám nastaveno aby se událost odchytávala 10 pixelů od kraje se odchytává pouze jeden pixel od kraje. A navíc z nějakého důvodu úplně stejný kód, který roztahoval panel ten TreeView prostě neroztahuje.
Budu se muset zeptat vyučujícího. Problém je, že s ním musím řešit mnohem důležitější věci než jenom hloupé rozhraní.
Neprotiřečím, říkal jsem v .NETu, ne ve WinForms a v .NETu je WPF
WPF už existuje hezkou chvilku,
nechci tu dělat chytrého, taky jsem na ně přešel až po dlouhé době a
pořád jsem to oddaloval, ale stavět teď na WF něco většího určitě
není dobrý nápad, ono vůbec dělat něco ve WF už nemá smysl.
Že se událost ignoruje uvnitř přes kontrolky by ti vadit nemělo, ne? Tobě jde jen o to, aby se zachytila u okraje a to jsem pochopil, že ti funguje.
To s tím TreeView nechápu. Roztahuj prostě panel a TreeView dej do toho panelu a nastav mu anchors. Vše udělej jen pro panely a do nich si dáš co chceš.
Já zase slyšel, že už ani to WPF neni jistý co se týče budoucnosti.
U okraje mi to funguje pouze pokud uvnitř nic není. Pokud uvnitř něco je a sahá to až po okraj, tak to tu událost pohltí. (respektive když jsem říkal, že mi to funguje, myslel jsem jenom když je panel prázdný, a to je jisté, že je mi naprosto k ničemu).
A musí to sahat až po okraj, to je celý ten důvod proč to dělám. Musí být uvnitř komponenta, co má nastaveno Dock na Fill, aby se roztahovala podle velikosti panelu. Pokud by ta komponenta uvntř měla pořád stejnou velikost, ať se panel roztahuje jak chce, postrádalo by to celé snažení smysl... plus až by se panel zmenšil tak, že by komponenta uvnitř sahala až po okraj, už by s panelem nešlo vůbec manipulovat.
Já zase slyšel, že už ani to WPF neni jistý co se týče budoucnosti.
Můžeš uvést zdroj informace?
Ještě je možnost použít toto: https://github.com/…ckpanelsuite ... skvělá věc pro
dokovaná okna ... zdroják si můžeš upravit dle svých potřeb
... jinak rozhodně bych uvažoval
přejít na wpf. Winform u větších projektů dokáže dost potrestat,
zvlášť při použití generických formulářů 
Zobrazeno 12 zpráv z 12.