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

VB.NET Discussion :

TabPage avec bouton fermer


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 168
    Points : 77
    Points
    77
    Par défaut TabPage avec bouton fermer
    Bonjour,

    J'ai enfin réussi grâce au code suivant à intégrer un "bouton fermer" à mes tabpages d'un tabcontrol. Il s'agit en fait d'une image bitmap. Le click sur ce bouton ferme (remove) le tabpage en question.

    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
     
    Public Class Form1
     'nécessite un Form1 un TabControl1 et un fichier c:\close.gif
     
        Dim _imgHitArea As Point = New Point(13, 2)
        Dim _imageLocation As Point = New Point(15, 5)
     
         Public Sub New()
            InitializeComponent()
     
            'Set the Mode of Drawing as Owner Drawn
            TabControl1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed
     
            'Add the Handler to draw the Image on Tab Pages
            AddHandler TabControl1.DrawItem, AddressOf TabControl1_DrawItem
        End Sub
     
         Private Sub TabControl1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs)
            Try
               'Close Image to draw
                Dim img As Image = New Bitmap("C:\Close.gif")
                Dim r As Rectangle = e.Bounds
     
                r = Me.TabControl1.GetTabRect(e.Index)
                r.Offset(2, 2)
                Dim TitleBrush As Brush = New SolidBrush(Color.Black)
                Dim f As Font = Me.Font
                Dim title As String = Me.TabControl1.TabPages(e.Index).Text
                e.Graphics.DrawString(title, f, TitleBrush, New PointF(r.X, r.Y))
                e.Graphics.DrawImage(img, New Point(r.X + (Me.TabControl1.GetTabRect(e.Index).Width - _imageLocation.X), _imageLocation.Y))
     
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
     
        Private Sub TabControl1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TabControl1.MouseClick
            Dim tc As TabControl = CType(sender, TabControl)
            Dim p As Point = e.Location
            Dim _tabWidth As Integer
     
            _tabWidth = Me.TabControl1.GetTabRect(tc.SelectedIndex).Width - (_imgHitArea.X)
            Dim r As Rectangle = Me.TabControl1.GetTabRect(tc.SelectedIndex)
            r.Offset(_tabWidth, _imgHitArea.Y)
            r.Width = 16
            r.Height = 16
            If r.Contains(p) Then
                Dim TabP As TabPage = DirectCast(tc.TabPages.Item(tc.SelectedIndex), TabPage)
                tc.TabPages.Remove(TabP)
            End If
        End Sub
     
     
    End Class
    Mes questions sont les suivantes :

    1) j'aimerais créer une classe MyTabPage (avec une propriété BtFermer Oui/Non) afin de l'appeler dans n'importe quel form et n'importe quel
    TabControl. Ceci me permettra de mieux appréhender le fonctionnement d'une classe

    2) Je préfèrerais vraiment que ce soit un bouton (button) plutôt qu'une image et que je puisse l'appeler dans mon code du style

    me.tabcontrol1.tabpage1.BtFermer etc...

    afin de lui affecter l'événement qui m'intéresse.

    Merci beaucoup pour votre aide.

    JP

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Il faut que ta classe hérite de l'objet TabPage en ajoutant un Inherits suivant exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class SuperTabPage
        Inherits TapPage
    Pour la question du bouton à la place du dessin, tu n'as pas d'autre option que de dessiner un bouton

  3. #3
    Membre régulier
    Profil pro
    Consultant finance
    Inscrit en
    Mars 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 168
    Points : 77
    Points
    77
    Par défaut
    Merci pour ta réponse.

    Dessiner un bouton, ça ne peut pas être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public Class SuperButton
        Inherits Button
    et l'utiliser ensuite exclusivement dans mon SuperTabPage ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Non il faut vraiement dessiner un image dans la partie suppérieure de l'onglet et détecter un click dans la zone de l'image.

    Vu que j'ai pas encore eu le temps de mettre le truc en question. Je ne peux que te fournir quelques liens qui devrait en principe répondre à ta problèmatique:

    http://www.dotnetspider.com/resource...abControl.aspx

    http://www.codeproject.com/KB/tabs/magictabcontrol.aspx

    http://www.codeproject.com/KB/tabs/f...abcontrol.aspx

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Non il faut vraiement dessiner un image dans la partie suppérieure de l'onglet et détecter un click dans la zone de l'image.
    Il y aurait d'autres solutions comme la création dynamique d'un bouton par volet. Ces boutons devraient avoir comme parent le TabControl et leur methode BringToFront() sera appelée après leur creation.

    Il faudrait alors prévoir des blancs devant/derrière les titres des volets et gérer l'event DrawItem du tabControl pour toujours (re)positionner le bouton associé au volet.

Discussions similaires

  1. JTabbedPane avec bouton fermer
    Par rolls dans le forum Composants
    Réponses: 13
    Dernier message: 04/11/2009, 23h36
  2. Bouton "Fermer" sur un en-tete de TabPage
    Par Cedric33 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/10/2008, 11h44
  3. Réponses: 3
    Dernier message: 30/06/2005, 12h50
  4. Réponses: 24
    Dernier message: 11/01/2005, 10h12
  5. Nouvelle form avec bouton dans barre taches
    Par DarkChamallo dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/05/2004, 20h44

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