Visualizza il feed RSS

Fix's Blog

TextBox con scritta di sfondo (Primo Esempio)

Valuta questo inserimento
di
Fix
pubblicato il 12-12-2010 alle 01:09 (4927 Visite)
Primo Esempio con gestione evento OnPaint:

Di seguito vi mostro un esempio di come sia possibile creare un Controllo Personalizzato che, ereditando da TextBox, permetta di inserire una scritta di sfondo quando la proprietà .Text risulta vuota.

Per poter utilizzare l'evento OnPaint del controllo TextBox, è stato necessario impostare il ControlStyles su UserPaint (che rimanda al controllo stesso la parte di disegno) perchè di Default tale evento non viene generato (è il sistema operativo che di incarica di disegnare la TextBox)

Ho riscontrato dei difetti di grafica lasciando impostato sempre UserPaint, per cui esso verrà impostato e disattivato in base al contenuto della TextBox. (ma ricordate che quando è disattivato, l'evento OnPaint non viene generato)

Il testo da inserire come sfondo è settabile attraverso un' apposita proprietà "BackText" , sia in fase di Design che in fase di RunTime.

Imports System.ComponentModel

Public Class TextBoxWithBackText
Inherits TextBox

Private pBackText As String = "BackText"

Public Sub New()
MyBase.new()
Me.SetStyle(ControlStyles.UserPaint, True)
End Sub

<Category("Aspetto"), Description("Testo di Sfondo")> _
Public Property BackText() As String
Get
Return Me.pBackText
End Get
Set(ByVal value As String)
pBackText = value
'-- aggiorno il controllo
Me.Invalidate()
End Set
End Property

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
'-- prendo l'oggetto graphics per il disegno manuale
Dim g As Graphics = e.Graphics
'-- disegno la scritta sulla textbox
g.DrawString(pBackText, New Font(Me.Font, FontStyle.Italic), Brushes.Gray, 0, 1)
'-- distruggo l'oggetto graphics
g.Dispose()
End Sub

Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)
'-- genero l'evento KeyUp
MyBase.OnKeyUp(e)
'-- Se la textbox vuota
'-- imposto il disegno manuale
'-- in questo modo verrà chiamato l'evento onPaint
If MyBase.Text.Length = 0 Then
Me.SetStyle(ControlStyles.UserPaint, True)
Else
'-- altrimenti lascio che sia il sistema operativo
'-- a disegnare il controllo
Me.SetStyle(ControlStyles.UserPaint, False)
End If
'-- Aggiorno il controllo
Me.Invalidate()
End Sub
End Class

Per chi non lo sapesse, una volta inserita questa Classe nel vostro progetto, dovrete compilare l'applicazione, in questo modo vi comparirà il nuovo controllo nella Casella degli Strumenti

NB: In presenza del SyntaxHighlighter (codice colorato con numeri di riga a lato) prima si deve eseguire un DoppioClick e successivamente copiarne il contenuto, altrimenti si avranno problemi di Formattazione

Continua >>

aggiornamento da 04-06-2011 a 10:58 di Fix

Categorie
Programmazione

Commenti