[ _v!rus_ @ 01.05.2007. 10:26 ] @
Zna li neko kako da "nateram" vizuelni editor (VS 2k5) da snima design-time promene na podkontrolama moje UserKontrole?

Napravio sam svoj UserControl, natrpao par standardnih WinForms kontrola i expose-ovao ih kao public properties. Kada stavim tu svoju kontrolu na npr. neku formu vidim lepo sve embedovane "podkontrole" u PropertyEditoru, ali posle save-a ili rebuilda sve promene se gube. Postoji li neki hint (one munje sa uglastim zagradama pre property definicije) koji bi ovo resio ili nesto slicno? Nadam se da je ovo resivo posto visual inheritance ne radi, ako i ovo ne radi onda doqrca im i alat i framework...

Poz.
[ _v!rus_ @ 01.05.2007. 12:21 ] @
Nasao sam

pre property definicije staviti [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)], npr.:
Code:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]        
public ToolStrip TopToolStrip { get { return topToolStrip; } }




[ _v!rus_ @ 01.05.2007. 13:05 ] @
Hmmm....jos jedan problem, na istu temu.

Izgleda da se nece serijalizovati svi propery-i podkontrola, cak i kada se koristi DesignerSerializationVisibility.Content.

Primer:
Imamo jednu UserControl-u i jedan TextBox na njoj (textBox). Zatim napravimo public property MyTextBox, gets textBox i ukljucimo DesignerSerializationVisibility.Content.

E sad, svaki TextBox ima property TabStop koji je po defaultu True, kada ga na nasoj UserControl preko PropertEditora postavimo na False onda ce se napraviti odgovarajuca linija u metodu UserControl.InitializeControls -> textBox.TabStop=False, i to "False" ce se boldovati u property editoru sto znaci da je non-default vrednost i da ce se overrideovati u pomenutom InitalizeControls. Za sada je to sve ok...

Kada takav UserControl stavimo na formu vidimo i MyTextBox kao jedan od property-a, i njegov property TabStop=False, koji je boldovan (!!!), jer je to non-default vrednost za TextBox.TabStop. Kada promenimo TabStop na True nece vise biti boldovan (!!!) i nece se napraviti linija TabStop=True u Form1.InitializeControls, jer true *jeste* default vrednost za TextBox.TabStop, i boze moj, sto bi se pravio "dodatni kod" za postavljanje vrednosti koja je ionako default.

Resenje je naravno rucno kucanje dodatnog koda za takve property-e, ali onda designer serijalizacija gubi svaki smisao, zasto su je onda uopste i implementirali ako radi polovicno? Drugo resenje bi bilo ne koristiti non-default vrednosti za property-e podkontrola, sto je jos gluplje...

Poz.
[ mmix @ 01.05.2007. 15:05 ] @
Cestitam, otkrio si jos jedan od 31000 bagova u visual studiju 2005. (konfete)

Ako prijavis ovo kao 31001 bug, verovatno ces dobiti sledeci odgovor:
"We chose to not make the engineering effort it would have required to enable this scenario for VS 2005. This decision was not make lightly and we understand customers would like this functionality, but <ovde ubaci svoj problem> is extremely costly to address." i bug ce biti zatvoren uz njihovu veliku zahvalnost sto si poboljsao statistiku resenih bugova

Voleo bih i ja da ovako mogu da kazem svom sefu, valjda ako kazes da ti to mozes ali da je to tvoj izbor da ne uradis i da ti je mnogo zao i da si odluku doneo teska srca, onda je ok sto si nesposoban i lenj i sto si upropastio veoma vaznu funkcionalnost od koje zavisi gomila tvojih musterija i tako sebi kupio puno vremena da se bavis novotarijama i interesantnim stvarima kao sto je WPF umesto da pomognes ljudima koji su ti dali pare. Interesantno (ili ne )



[ _v!rus_ @ 01.05.2007. 16:00 ] @
Pa dobro sad, sta je tu je

Mozda ce Orcas nesto poboljsati na temu tih 31000 bugova :evil grin
[ negyxo @ 03.05.2007. 17:53 ] @
Moze li jedno pitanje?

Zasto je to bug ako ne generise designer defaultne properties-e? Ja sam do sada mislio da je to normalno ponasanje.

A postoji i resenje da se isforsira generisanje bilo cega u designeru. Namesti se CodeDomSerializer za custom kontrolu i viola.