Ereditarietà visuale

domenica 03 agosto 2008 - 09.10

danpres Profilo | Newbie

mi domandavo se esiste un metodo per risolvere questo problema.

ho realizzato alcune mie classi, ereditando le classi di base standard.
per esempio ho creato la classe myButton che eredita dal button standard.

Public Class myButton
Inherits System.Windows.Forms.Button

Ora il mio problema è quello di impostare una proprietà del myButton, in maniera da ereditarla in tutti i form che realizzerò.
Facciamo per esempio che voglio impostare il backcolor a RED. (come si fà ?)

Facciamo pure che dopo aver creato un pò di form, decido di cambiare il colore della classe myButton a BLUE.
Dovrebbe cambiarmi in tutte le maschere precedendemente realizzate (si può fare ?), tranne in quelle dove volutamente ho deciso di impostare il GREEN per esempio.

Non riesco ad implementare questo tipo di ereditarietà, qualcuno mi può aiutare ?

grazie in anticipo

freeteo Profilo | Guru

ciao,
certo che si può fare, devi andare in override della proprietà del tuo componente.
Infatti, in ogni maschera, quando viene creata l'istanza del tuo componente ed aggiunta alla form, vengono impostate alcune proprietà, tra le quali anche il BackColor, e quindi se tu da codice, nel New ad esempio, le imposti, nella form vengono sovrascritte.
Andando in override, impedisci che nelle form vengano impostati dei valori diversi da quelli che vuoi tu.

Tradotto in codice:
Public Overrides Property BackColor() As System.Drawing.Color Get Return #TUO COLORE# End Get Set(ByVal value As System.Drawing.Color) '--- NON FACCIO NIENTE, IGNORANDO IL SETTAGGIO End Set End Property


ps: se a design time della Form, dentro a visual studio, non si applicano le modifiche in tempo reale, prova a fare un rebuild del progetto in modo che venga rigenerato il componente, evitando quindi la cache.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

danpres Profilo | Newbie

grazie 1000..

mi hai aiutato a risolvere un passaggio...

ora il mio button ha la seguente proprietà:

Private myBackColor As Color = Color.Blue <System.ComponentModel.DefaultValue(GetType(Color), "Blue")> _ Public Overrides Property BackColor() As Color Get Return myBackColor End Get Set(ByVal value As Color) MyBase.BackColor = value myBackColor = value End Set End Property

A questo punto ho un problema:
Il colore del button devo poterlo cambiare se voglio nel form, infatti devo impostare il SET come ho fatto.
ALLORA:
Il button nella classe è BLUE, in 10 form quindi nasce BLUE.
In una form delle dieci, il button lo imposto a GREEN.

A questo punto potrebbe nascere l'esigenza di cambiare il colore in tutti e 9 i form che son rimasti BLUE, e farli diventare RED.
Il risultato che vorrei ottenere è che sui 9 form che ho lasciato il colore default (BLUE) devono diventare RED, mentre sul form con il button modificato a GREEN, deve rimanere GREEN.

Ovviamente questo è un esempio, risolto questo dovrei risolvere altri problemi simili nella logica ma molto più seri.
grazie ancora

freeteo Profilo | Guru

ciao,
il problema è che dentro alle form, nel "Form.Designer.vb" viene settata questa proprietà quando trascini il componente, ovvero viene scritto da visual studio in automatico il codice.

Se anche tu mettessi qualche controllo tipo un booleano nel "set" della proprietà, visual studio scrivendo lui in automatico il set della proprietà ti annullerebbe questo controllo, e a questo punto non so se riesci a farlo, senza modificare il codice scritto da visual studio...a meno che non ci sia qualche attributo da mettere nella proprietà per dire che non venga scritta di default (questo onestamente non lo saprei).
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5