C# bottone personalizzato

venerdì 23 maggio 2008 - 10.09

sxmac Profilo | Newbie

Ciao, a tutti...
Spero di aver postato nella sezione giusta...
Sono appena entrato nel mondo c# e sono al mio primo programma ...
Avrei la necessità di, ogni volta che inserisco un bottone in una form, che vengano impostate (automaticamente) determinate proprietà (es.: colore di sfondo, cursor, dimensioni).
Come faccio?
Potrei farlo tramite l'ereditarietà? Se si come?
Posso ottenere il mio scopo in altro modo, magari tramite un controllo personalizzato?
grazie a tutti!!

Brainkiller Profilo | Guru

>Avrei la necessità di, ogni volta che inserisco un bottone in
>una form, che vengano impostate (automaticamente) determinate
>proprietà (es.: colore di sfondo, cursor, dimensioni).

Inserito a runtime cioè dinamicamente via codice durante l'esecuzione del programma ? Oppure a design time ossia quando stai progettando la Form e trascini il button dalla Toolbox ?

>Come faccio?
>Potrei farlo tramite l'ereditarietà? Se si come?
>Posso ottenere il mio scopo in altro modo, magari tramite un
>controllo personalizzato?

Si questa è una delle vie. Attendo la risposta alla mia prima domanda per risponderti qui.
Ciao


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

sxmac Profilo | Newbie

Avrei bisogno in fase di progettazione ... (design time)
Grazie mille ..

Brainkiller Profilo | Guru

>Avrei bisogno in fase di progettazione ... (design time)
>Grazie mille ..

Ciao,
allora sì devi derivare i controlli. Se non hai esperienza di OOP sarebbe l'ideale prima che tu cominciassi di studiare qualcosa se no quello che ti sto spiegando ti risulterà non chiaro.
Se io voglio creare un controllo Button derivato posso fare così:

public class Class1 : Button { public Class1() { } protected override void OnCreateControl() { this.Text = "CIAO"; this.BackColor = Color.Green; base.OnCreateControl(); } }

Questo codice va a finire in un progetto Class Library che verrà compilato sottoforma di DLL. Ora la DLL si può caricare nella ToolBox e questo nuovo Button diventa disponibile tra i vari controlli. Se tu ora lo trascini sulla Form e lanci l'applicazione il Button nuovo di default avrà colore verde di sfondo e testo "Ciao" proprio quello che abbiamo definito nella nostra classe.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

sxmac Profilo | Newbie

Innanzi tutto grazie per la tempestiva risposta.
Per quanto riguarda la programmazioni ad oggetti, non è un problema ... programmo in Java da anni!

Ritornando al mio problema ...
Avevo già definito una classe come quella che mi hai indicato.
La differenza tra la mia e la tua sta nel fatto che anzichè "sovrascrivere" il metodo OnCreateControl(), avevo settato le proprietà direttamente nel metodo InitializeComponent() così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Credo che sia la stessa cosa ... (la mia magari non è così bella stilisticamente ...)
Il problema che ho, che tralaltro sussiste anche con la tua soluzione, è che quando disegno l'oggeto nella nuova form lo sfondo non risulta colorato di giallo, non vengono mantenuto le dimensioni, non compare come Text "bottone", .... in pratica è come disegnare un nuovo bottone con il controllo button!
Per quanto riguarda la size e le altre proprietà vengono sovrascritte appena disegno il bottone e quindi tutte le volte devo "eliminare" le corrispondenti riche di codice nel file .design.
Non c'è un modo di rendere questi attributi non modificabili?

Brainkiller Profilo | Guru

>Il problema che ho, che tralaltro sussiste anche con la tua soluzione,
>è che quando disegno l'oggeto nella nuova form lo sfondo non
>risulta colorato di giallo, non vengono mantenuto le dimensioni,
>non compare come Text "bottone", .... in pratica è come disegnare
>un nuovo bottone con il controllo button!

Eh no.
Ho parlato con un mio collega per capire di questo malfunzionamento. Probabilmente ignoro qualcosa anche io. Se tu chiudi la finestra Form.cs e la riapri vedrai che le proprietà BackColor e Text saranno valorizzate e rappresentate anche nella Form correttamente. Così anche se lanci l'applicazione. Probabilmente è un problema di refreshing. Di conseguenza anche i valori nel designer.cs vengono automaticamente aggiornati. Prova!

Mentre effettivamente come dici tu appena trascini il controllo non viene rappresentato correttamente.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

sxmac Profilo | Newbie

Ok ... ce l'ho fatta!!!

Nella Classe dove definivo il bottone avevo saltano una lettera nel namespace (è per questo che sovrescriveva gli attributi!!), ma anche così non funzionava: se chiudevo e riaprivo la finestra non andava.
Poi ho riavviato VisualStudio ed ora chiudo e riapro le finestre e fa il refresh e si vede correttamente.

Grazie mille per la pazienza sei stato gentilissimo!
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5