Evenements classes imbriquées [Résolu]

Signaler
Messages postés
7
Date d'inscription
samedi 8 mars 2003
Statut
Membre
Dernière intervention
11 août 2020
-
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
-
Bonjour à tous,

Voilà j'ai un probléme auquel je ne trouve pas la solution.

Je posséde une classe nommée CLASS_TABLETRAVAIL qui hérite d'une classe CLASS_TABLE.
Dans cette CLASS_TABLE, je gére différents événements de souris. MOVE, ...

Ces classes me permettent de dessiner à l'écran un panel parent qui posséde un panel enfant, un label et un picturebox.
La Classe de base CLASS_TABLE dessine le panel parent et gére ses événements souris dont j'ai besoin. La classe fille CLASS_TABLETRAVAIL dessine le reste mais j'aimerai rattacher des événements de la classe fille à ceux de la classe mére. Est-Ce possible ?

Pour faire simple, j'aimerai pouvoir déplacer avec la souris mon panel parent même si je clique sur le panel enfant ou le picturebox. Actuellement si je clique sur le panel parent tout va bien mais si je clique par exemple sur le panel enfant , rien ne se passe.


Merci pour votre coup de main

5 réponses

Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
Bonjour

dans ma boule de cristal, il me semble qu'il manque un ; à la ligne 217.

Pour toute réponse sérieuse, merci de poster le code de tes 2 classes en suivant ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Messages postés
7
Date d'inscription
samedi 8 mars 2003
Statut
Membre
Dernière intervention
11 août 2020

Oui Désolé. Je reprends donc : j'ai une classe de base Class_Table qui hérite du contrôle panel. J'ai ensuite plusieurs classes dérivées à celle-ci dont une Class_TableTravail.

Ma classe de base posséde des événements souris pour le déplacement.

Public Class Class_Table : Inherits Panel
    Private Le_TpsCycleEcoul As UInteger
    Private Le_TpsTransitEcoul As UInteger
    Private Le_Id As UInteger
    Private Protected Le_Label As Label
    Private La_Présence As Boolean
    Private LocationInit As Point

    Public Property Datas As New Class_Vehicule
    Public Property Source As Class_Source
......


    Public Sub New()
        Le_Label = New Label With {
            .Text = Le_Id,
            .ForeColor = Color.Red,
            .AutoSize = True,
            .Left = 2,
            .Top = 2,
            .BackColor = Color.Transparent}
    End Sub


--
   Private Sub Class_Table_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
        Dim SelectInstance As Class_Table

        If ModeEdition = Liens And e.Button = MouseButtons.Left Then
            SelectInstance = DirectCast(sender, Class_Table)
            SelectInstance.BackColor = Color.Blue
            Edit_Liens.SelectTable = SelectInstance
        End If

        If ModeEdition = Contexte And e.Button = MouseButtons.Left Then Présence = Not Présence
    End Sub


    Private Sub Class_Table_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
        If e.Button = MouseButtons.Left Then LocationInit = e.Location
    End Sub


    Private Sub Class_Table_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
        If e.Button = MouseButtons.Left Then
            Left = (e.X + Left - LocationInit.X) And &HFFFFFFF0
            Top = (e.Y + Top - LocationInit.Y) And &HFFFFFFF0
        End If
    End Sub


Ma classe dérivée posséde un panel et un picturebox

Public Class Class_TableTravail : Inherits Class_Table
    'Public Const XGrip As Integer = 2
    'Public Const YGrip As Integer = 2

    Private Table As Panel
    Private Robot As PictureBox


    Public Sub New(xid As UInteger, xcolor As Color, xx As Integer, yy As UInteger)
        Table = New Panel With {
            .BorderStyle = BorderStyle.FixedSingle,
            .Width = 40,
            .Height = 20,
            .Left = 4,
            .Top = 29,
            .BackColor = xcolor}

        Robot = New PictureBox With {
            .Image = FormTravail.ModeleRobot.Image,
            .Size = New Size(36, 28),
            .SizeMode = PictureBoxSizeMode.StretchImage,
            .Left = 6,
            .Top = 2}

        Id = xid
        Top = yy - Table.Top
        Left = xx - Table.Left

        Table.Controls.Add(Le_Label)
        Controls.Add(Table)
        Controls.Add(Robot)
    End Sub




J'aimerai pouvoir déplacer mon ensemble panel parent à l'aide la souris quand celle-ci est à l'intérieur méme si je suis posé sur les elements fils.
Mon souci est que lorsque que je pose la souris sur le panel parent, les événements sont bien déclenchés et mon ensemeble se déplace bien. Par contre si je pose ma souris sur le panel fils ou le picturebox, les événements ne se déclenchent pas.

J'ai essayé de voir avec Addhandler mais je vois pas trop

Merci d'avance et désolé pour ma premiére explication
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
Ha ben tu vois avec le dessin et ton code, je m'aperçois que je n'avais vraiment pas compris....
Ton pictureBox ne peut pas hériter d'un panel..... Et y'a pas de classe imbriquée....

Afin d'éviter tout mal entendu futur.

Une classe fille en français dérive d'une classe mère, à ne pas confondre avec un contrôle enfant qui est contenu dans un contrôle conteneur ou parent.

Une classe imbriquée est une classe qui est écrite dans une classe

Public Class Machin
......
      Public Class Truc
......
      End Class
End Class

Truc est imbriquée dans Machin.

Dans ton cas, ce que je ferais c'est simplement abonner tous les évènements de souris aux méthodes qui vont bien.

Par exemple pour Panel2


Et PictureBox1
Messages postés
7
Date d'inscription
samedi 8 mars 2003
Statut
Membre
Dernière intervention
11 août 2020

Bonjour Whimeril,

Merci pour ta réponse.
Oui en effet ce ne sont pas des classes imbriquées. Mal exprimé.
Je ne pouvais pas créer les abonnements lors du design car les objets sont créés lors de l'execution. J'ai donc ajouté quelques AddHandler dans ma classe dérivée et çà marche.

Encore merci.

--
Public Class Class_TableTravail : Inherits Class_Table
    Private Table As Panel
    Private Robot As PictureBox


    Public Sub New(xid As UInteger, xcolor As Color, xx As Integer, yy As UInteger, xxGrip As Integer, YyGrip As Integer)
        Table = New Panel With {
            .BorderStyle = BorderStyle.FixedSingle,
            .Width = 40,
            .Height = 20,
            .Left = 4,
            .Top = 29,
            .BackColor = xcolor}

        Robot = New PictureBox With {
            .Image = FormTravail.ModeleRobot.Image,
            .Size = New Size(36, 28),
            .SizeMode = PictureBoxSizeMode.StretchImage,
            .Left = 6,
            .Top = 2}

        Id = xid
        XGrip = xxGrip
        YGrip = YyGrip
        Top = yy - YGrip
        Left = xx - XGrip

        AddHandler Table.MouseDown, AddressOf MyBase.Class_Table_MouseDown
        AddHandler Robot.MouseDown, AddressOf MyBase.Class_Table_MouseDown
        AddHandler Table.MouseMove, AddressOf MyBase.Class_Table_MouseMove
        AddHandler Robot.MouseMove, AddressOf MyBase.Class_Table_MouseMove
Messages postés
14720
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 septembre 2020
432
Tant mieux.
Pense à marquer le sujet résolu