settembre 2007 Blog Posts

Proprietà private mostrata nel designer

Ho un controllo che eredita da textbox e ho bisogno di nascondere la proprietà textmode in quanto non più utilizzata. Ho trovato due soluzioni: la prima, abbastanza semplice, fare un override della proprietà pubblica andando a settare l'attributo Browsable a false. Funziona perfettamente. Ma se invece dell'override effettuo un private new (shadowing), la proprietà continua a essere mostrata nel designer, nonostante sia private! Segnalato a Microsoft: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=299845 Technorati tags: .NET

CompositeControl

Innovazione del Framework 2.0, questo tipo di controlli permette di creare controlli complessi costituiti da più controlli semplici. Il paradigma su cui si fondano è la composizione rispetto alla tradizionale renderizzazione. E' per questo che sarebbe meglio non sovrascrivere il Render() se non per particolari necessità. Oltre che ereditare da CompositeControl e creare il designer opportuno (che eredita da CompositeControlDesigner), sarà necessario sovrascrivere la collection dei Controls e ogni proprietà che opera sui controlli sottostanti richiamando EnsureChildControls() che forza la creazione dei controlli se non già presente. Nella CreateChildControls() occorre chiamare una Clear() sui controlli presenti, creare i nuovi controlli e impostare a true...

base.CssClass

Oggi mi è capitata una cosa singolare. Create una classe che eredita da TextBox (diciamo la classe A) e nel costruttore (che ha : base() ) assegnate a una stringa base.CssClass (es.: string a = base.CssClass;). Poi create una classe B che eredita da A e nel costruttore (che ha : base() ) assegnate un'altra stringa a CssClass (es. base.CssClass = "xxx"; ). Lanciate l'applicazione e in debug analizziamo cosa succede. I due costruttori vengono richiamati nell'ordine corretto (prima A poi B) ma analizzando il contenuto di base.CssClass nel costruttore di A figura già l'assegnamento della stringa che avverrà solo in B. In effetti poi l'assegnamento non...