IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Comment dessiner sur une TextBox


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Points : 123
    Points
    123
    Par défaut Comment dessiner sur une TextBox
    Bonsoir,
    Je souhaite dessiner une image sur une TextBox. Pour ce faire, j'ai créer une classe dérivant de ma TextBox. Puis je redéclare le OnPaint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)
            e.Graphics.DrawImage ( My.Resources.ClearFilter, Me.Size.Width - My.Resources.ClearFilter.Width , 0 )
        End Sub
    Le soucis c'est que mon image est dessiné derrière la TextBox, j'aperçois le sommet de mon image. J'ai essayé l'évenement Paint, mais c'est la même chose.

    Une idée ?
    Merci de votre aide !

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je crois que le textbox est spécial et qu'il est géré par l'os
    donc faudrait chercher des api pour modifier son rendu
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Ah bizarre ça... Je voudrais éviter toucher à l'API.

    Mon but est de créer une TextBox avec une image toute à droite qui permette de vider la TextBox. Système bien connu sous KDE (pour les filtres en temps réel).

    Je voulais afficher l'image et gérer l'événement Click dans cette zone.

    Mais peut-être que tu aurais une autre solution pour le faire ?

    Merci de ta réponse

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    Bonjour,

    Une solution comme une autre...
    Tu créé un textbox, un label. Tu met une image dans ton label, tu insères ton label dans ton textbox et tu gères l'evenement OnClick du label.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim txt As New TextBox
    Dim lb As New Label
    lb.Image = MonImage
    lb.Size = New Size(15, 15)
    lb.Cursor = Cursors.Hand
    lb.Dock = DockStyle.Right
    txt.Controls.Add(lb)
    Addhandler lb.Click, addressof Lb_Onclick
    c'est juste une piste...
    "La Bretagne, ça vous gagne !!!"

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    J'ai résolu mon problème avec un label, comme conseillé plus haut

    Par contre mon label est déclaré directement dans ma classe TextBoxFilter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Public Class TextBoxFilter 
        inherits ToolStripTextBox 
     
        '-------------------------------------------------------------------------'
        '                                  ATTRIBUTS                              '
        '-------------------------------------------------------------------------'
        Private _columns As List( Of String )
        Private _critere As String
        Private _clearZone As Rectangle
        Private _label As Label
     
     
        '-------------------------------------------------------------------------'
        '                                  EVENEMENTS                             '
        '-------------------------------------------------------------------------'
        Public Event CritereChanged( ByVal critere As String )
     
     
        '-------------------------------------------------------------------------'
        '                                 CONSTRUCTEUR                            '
        '-------------------------------------------------------------------------'
        Public Sub New()
            'initialiations
            _columns = New List( Of String )
            _critere = String.Empty
            _clearZone = New Rectangle( Me.Size.Width - 17, Me.Size.Height - 10, my.Resources.ClearFilter.Width , my.Resources.ClearFilter.Height  ) 
            _label = New Label
     
            'création du label        
            _label.Text = ""
            _label.Width = My.Resources.ClearFilter.Width
            _label.Height = My.Resources.ClearFilter.Height
            _label.Image = My.Resources.ClearFilter
            _label.Location = New Point( Me.Width - ( My.Resources.ClearFilter.Width + 5 ), 3 )
            _label.Visible = False
            TextBox.Controls.Add( _label )
        End Sub
     
     
        '-------------------------------------------------------------------------'
        '                                  PROPRIETES                             '
        '-------------------------------------------------------------------------'
        Public ReadOnly Property Critere As String
            Get
                Critere = _critere
            End Get 
        End Property 
     
        Public Property Columns As List( Of String )
            Get
                Return _columns
            End Get
            Set ( ByVal list As List( Of String ) )
                _columns = list
            End Set
        End Property
     
     
        '-------------------------------------------------------------------------'
        '                                  EVENEMENTS                             '
        '-------------------------------------------------------------------------'
        Private Sub TextBoxFilter_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.TextChanged
            _critere = String.Empty 
     
            'création du critère       
            For Each col As String In _columns
                If ( _critere.Length > 0 ) then _critere &= " OR "
                _critere &= " " & col & " LIKE '*" & Me.Text  & "*'"
            next
     
            'si la case n'est pas vide, un filtre est appliqué, on colore la textbox
            If ( Me.Text.Length > 0 ) Then 
                Me.BackColor = system.Drawing.SystemColors.ControlLight 
                _label.Visible= True
            Else 
                Me.BackColor = system.Drawing.SystemColors.Window 
                _label.Visible = False
            End If
     
            'on lève l'événement
            RaiseEvent CritereChanged ( _critere )
        End Sub
     
        Private Sub TextBoxFilter_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
            'TODO : Si on click sur l'image ClearFilter -> vider la TextBox
     
        End Sub
     
        Private Sub TextBoxFilter_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
            If (     e.X >= _label.Location.X And e.X <= _label.Location.X + _label.Width _
                 And e.Y >= _label.Location.Y And e.Y <= _label.Location.Y + _label.Height ) Then
                Me.Clear
            End If
        End Sub
     
        Private Sub TextBoxFilter_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
            If (     e.X >= _label.Location.X And e.X <= _label.Location.X + _label.Width _
                 And e.Y >= _label.Location.Y And e.Y <= _label.Location.Y + _label.Height ) Then
                'TODO : Changer la forme du curseur
            End If
        End Sub
    End Class
    Il faut également que je ressorte l'image utilisée qui est aujourd'hui en ressource. Le principe est d'avoir une propriété du composant qui permet de définir l'image utilisée.

    Il me reste un petit détail, c'est le curseur. Lorsque je passe sur l'image, il faudrait que le curseur se change en "flèche". Mais je n'ai pas trouvé le moyen de le changer depuis ma classe.

    Merci pour l'aide !

Discussions similaires

  1. Réponses: 14
    Dernier message: 04/03/2015, 22h16
  2. comment Placer un dessin sur une fiche?
    Par gaston11 dans le forum Débuter
    Réponses: 3
    Dernier message: 17/12/2012, 23h10
  3. [Débutant] comment dessiner sur une interface graphique ou détecter un contour
    Par habibi_esstt dans le forum MATLAB
    Réponses: 1
    Dernier message: 04/03/2010, 11h21
  4. Comment limiter la saisie sur une TextBox ?
    Par dcollart dans le forum ASP.NET
    Réponses: 5
    Dernier message: 27/11/2006, 14h41
  5. comment dessiner sur une image
    Par baracouda dans le forum Graphisme
    Réponses: 2
    Dernier message: 26/05/2006, 00h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo