Label et image dans textbox

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 081 fois - Téléchargée 19 fois

Contenu du snippet

une petite classe qui améliore la TextBox
on ajoute un background label et une background picture
qui disparait quand la textbox a le focus
et qui réaparait seulement quand TextBox.Text=String.Empty

Source / Exemple :


' post original by Zijian
'http://www.codeproject.com/KB/miscctrl/Parasite_Pattern2.aspx
'revision par gillardg
'traduction en vb.net et ajout d'une propriété image
Public Class InTextboxLabel

    Protected box As TextBoxBase
    Protected hint As String
    Protected lab As Label
    ''' <summary>
    ''' usage :
    ''' dans l'évenement Load de la form ( MyBase.Load )
    ''' Dim tex As New InTextboxLabel(tb1, "User Name", Image.FromFile("annsom.png"))
    ''' </summary>
    ''' <param name="box"></param>
    ''' <param name="hint"></param>
    ''' <param name="picture"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal box As TextBoxBase, ByVal hint As String, Optional ByVal picture As Image = Nothing)
        Me.box = box
        Me.hint = hint

        AddHandler box.Enter, AddressOf box_Enter
        AddHandler box.Leave, AddressOf box_Leave
        AddHandler box.TextChanged, AddressOf box_TextChanged

        lab = New Label()
        lab.Text = hint

        lab.Image = picture
        lab.ForeColor = SystemColors.ActiveBorder
        box.Controls.Add(lab)
        lab.Dock = DockStyle.Fill
        AddHandler lab.Click, AddressOf panel_Click

        If String.IsNullOrEmpty(box.Text) Then
            lab.Show()
        End If
    End Sub

    Private Sub box_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
        If (Not String.IsNullOrEmpty(box.Text)) Then
            lab.Hide()
        ElseIf (Not box.Focused) Then
            lab.Show()
        End If
    End Sub

    Private Sub panel_Click(ByVal sender As Object, ByVal e As EventArgs)
        lab.Hide()
        box.Select()
    End Sub

    Private Sub box_Leave(ByVal sender As Object, ByVal e As EventArgs)
        If String.IsNullOrEmpty(box.Text) Then
            lab.Show()
        End If
    End Sub

    Private Sub box_Enter(ByVal sender As Object, ByVal e As EventArgs)
        lab.Hide()
    End Sub
End Class

Conclusion :


ça fait longtemps que j'avais pas posté

question souvent posée, voila une réponse

A voir également

Ajouter un commentaire

Commentaires

BadoqueAlex
Messages postés
129
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
6 juin 2009
-
Pas mal mais j'aurais plutôt ajouté une propriété au controle TextBox existant du genre TextIsEmpty.
gillardg
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3 -
si tu as 25 textbox ??
cs_claudetom
Messages postés
116
Date d'inscription
jeudi 11 octobre 2001
Statut
Membre
Dernière intervention
15 octobre 2012
-
suite réponse du créateur du code, je poste le mien:
implémentation : comme un objet Textbox

<Li>
' post original by Zijian
'http://www.codeproject.com/KB/miscctrl/Parasite_Pattern2.aspx
'revision par gillardg
'traduction en vb.net et ajout d'une propriété image

Imports System.Windows.Forms

Public Class TextBox
Inherits System.Windows.Forms.TextBox

Protected lab As Label

''' <summary>
''' Nouveau Textbox
''' </summary>
''' <remarks></remarks>
Public Sub New()
lab = New Label()
lab.Text = hint

lab.ForeColor = SystemColors.ActiveBorder
Me.Controls.Add(lab)
lab.Dock = DockStyle.Fill
AddHandler lab.Click, AddressOf panel_Click

If String.IsNullOrEmpty(Me.Text) Then
lab.Show()
End If
End Sub

''' <summary>
''' usage :
''' dans l'évenement Load de la form ( MyBase.Load )
''' Dim tex As New InTextboxLabel("User Name", Image.FromFile("annsom.png"))
''' </summary>
'''

'''

''' <remarks></remarks>
Public Sub New(ByVal hint As String, Optional ByVal picture As Image = Nothing)
Me.New()
Me.Hint = hint
Me.Picture = picture
End Sub

#Region " Propriétés "
Private m_HintAlignment As ContentAlignment = ContentAlignment.MiddleLeft
Public Property HintAlignment() As ContentAlignment
Get
Return m_HintAlignment
End Get
Set(ByVal value As ContentAlignment)
m_HintAlignment = value
lab.TextAlign = m_HintAlignment
End Set
End Property

Private m_Hint As String = "Entrer un texte"
Public Property Hint() As String
Get
Return m_Hint
End Get
Set(ByVal value As String)
m_Hint = value
lab.Text = Hint
End Set
End Property

Private m_PictureAlignment As ContentAlignment = ContentAlignment.MiddleRight
Public Property PictureAlignment() As ContentAlignment
Get
Return m_PictureAlignment
End Get
Set(ByVal value As ContentAlignment)
m_PictureAlignment = value
lab.ImageAlign = m_PictureAlignment
End Set
End Property

Private m_Picture As Image
Public Property Picture() As Image
Get
Return m_Picture
End Get
Set(ByVal value As Image)
m_Picture = value
If Not m_Picture Is Nothing Then
lab.Image = m_Picture
End If
End Set
End Property
#End Region

Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
MyBase.OnTextChanged(e)
If (Not String.IsNullOrEmpty(Me.Text)) Then
lab.Hide()
ElseIf (Not Me.Focused) Then
lab.Show()
End If
End Sub

Private Sub panel_Click(ByVal sender As Object, ByVal e As EventArgs)
lab.Hide()
Me.Select()
End Sub

Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
MyBase.OnLeave(e)
If String.IsNullOrEmpty(Me.Text) Then
lab.Show()
End If
End Sub

Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
MyBase.OnEnter(e)
lab.Hide()
End Sub
End Class </Li>

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.