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 :

Creation objets dynamiques


Sujet :

VB.NET

  1. #1
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut Creation objets dynamiques
    Bonjour a tout le monde


    Question ( peut être bête , mais bon )

    Est-il possible de créer un objet sur une form, a partir d'une autre

    exemple de code !!! pour explication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Class Form1
     
    For i= 0 to MonDatagridView.rows.count-1
     
    If MonDatagridView.rows(i).cell("MaPage").value=1 then Créer objet1 Picture sur Form2
     
    If MonDatagridView.rows(i).cell("MaPage").value=2 then Créer un objet1 Picture sur Form3
     
    If MonDatagridView.rows(i).cell("MaPage").value=1 then Créer objet2 Picture sur Form2
     
    next i
    end Class

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Form est un container comme un autre.

    Par objet, on va supposer que tu veux parler de Control

    Tu peux parfaitement instancier un Controlet l'ajouter à la collection Controls de n'importe quelle Form (mais une seule à la fois : car tout Control dans un container référence son Container dans sa propriété Parent).

    La seule contrainte est que cette manip doit être faite dans le thread qui a instancié la form à laquelle tu ajoutes des Controls.

  3. #3
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    merci Bluedeep pour l'info

    As-tu une référence ou exemple de code a ce sujet

  4. #4
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Re-

    Ceci fonctionne, mais je crois être coincé plus loin car je voudrais lors de l'affichage de ma form frmpage1 pouvoir déplacer mon Pb créé dynamiquement avec la souris ( voir code plus bas ). mais....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Dim pb As PictureBox = New PictureBox
     
                With pb
                      .BorderStyle = BorderStyle.Fixed3D
                      .Size = New Size(200, 200)
                      .Location = New Point(50, 150)
                End With
     
     
                FrmPage1.Panel1.Controls.Add(pb)
                FrmPage1.Show()
    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
     Private Sub PbDocument1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PbDocument1.MouseDown, PbDocument2.MouseDown
     
                If e.Button = Windows.Forms.MouseButtons.Left Then
                      x = e.X
                      y = e.Y
                End If
     
          End Sub
     
          Private Sub PbDocument1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PbDocument1.MouseMove, PbDocument2.MouseMove
     
                If e.Button = Windows.Forms.MouseButtons.Left And sender.name = "PbDocument1" Then
                      PbDocument1.Left += (e.X - x)
                      PbDocument1.Top += (e.Y - y)
                End If
     
                If e.Button = Windows.Forms.MouseButtons.Left And sender.name = "PbDocument2" Then
                      PbDocument2.Left += (e.X - x)
                      PbDocument2.Top += (e.Y - y)
                End If
     
          End Sub
    Une idée peut être

  5. #5
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Mais quoi? Tu n'arrives pas à faire que tes picturebox se déplacent en clikant dessus ?
    Si c'est ca je te proposerait une solution: créer une classe héritant de la classe PictureBox et rajoute tes méthodes PictureBox_MouseDown et PictureBox_MouseMove à l'intérieur:

    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
     
    Public Class MaPictureBox
        Inherits PictureBox
     
        Dim x, y As Integer
     
        Private Sub Me_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
            If e.Button = Windows.Forms.MouseButtons.Left Then
                x = e.X
                y = e.Y
            End If
        End Sub
     
        Private Sub Me_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
            If e.Button = Windows.Forms.MouseButtons.Left Then
                sender.Left += (e.X - x)
                sender.Top += (e.Y - y)
            End If
        End Sub
     
    End Class
    ensuite, au moment de créer tes PictureBox, créer plutôt des MaPictureBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            Dim pict As New MaPictureBox With {
                .BackColor = Color.Green,
                .Width = 100,
                .Height = 100}
     
            Dim frm2 As New Form2
            frm2.Controls.Add(pict)
            frm2.Show()
    Est ce que ça répond à ton problème?

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par mic.carrer Voir le message
    Mais quoi? Tu n'arrives pas à faire que tes picturebox se déplacent en clikant dessus ?
    Si c'est ca je te proposerait une solution: créer une classe héritant de la classe PictureBox et rajoute tes méthodes PictureBox_MouseDown et PictureBox_MouseMove à l'intérieur
    Y'a t il une quelconque utilité de créer une classe héritant de PictureBox si c'est uniquement pour s'abonner aux évènements MouseDown et MouseMove?

  7. #7
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Bah si toutes ses picturebox doivent pouvoir se déplacer (+ d'autres spécificités j'imagine..) , pourquoi ne pas utiliser un objet approprié? Sinon...

    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
     
        Sub AddPictInForm2()
     
            Dim pict As New PictureBox
            AddHandler pict.MouseDown, AddressOf PictureBox_MouseDown
            AddHandler pict.MouseMove, AddressOf PictureBox_MouseMove
     
           Dim frm2 As New Form2
           frm2.Controls.Add(pict)
           frm2.Show()
     
        End Sub
     
     
        Private Sub PictureBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            If e.Button = Windows.Forms.MouseButtons.Left Then
                x = e.X
                y = e.Y
            End If
        End Sub
     
        Private Sub PictureBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            If e.Button = Windows.Forms.MouseButtons.Left Then
                sender.Left += (e.X - x)
                sender.Top += (e.Y - y)
            End If
        End Sub
    C'est pas le principe de la prog objet de créer ses propres objets?

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par mic.carrer Voir le message
    Bah si toutes ses picturebox doivent pouvoir se déplacer (+ d'autres spécificités j'imagine..) , pourquoi ne pas utiliser un objet approprié? Sinon...
    C'est pas le principe de la prog objet de créer ses propres objets?
    Certes mais faut pas en abuser non plus
    En l'occurence, si tu utilises les évènements, ca ne sert à rien d'hériter.
    Si tu hérites alors il faut utiliser l'héritage avec Overrides
    De plus, il faudrait mieux s'affranchir de l'utilisation de sender car la tu présumes que sender est ta picturebox or rien ne te le garantit. D'ailleurs si tu te mets en Strict ca ne compilera pas: Object n'a pas de propriété Left ou Top

  9. #9
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Je vois ce que tu veux dire mais..
    En l'occurence, si tu utilises les évènements, ça ne sert à rien d'hériter.
    Pourquoi?

    Moi j'aurais créer ma classe MaPictureBox car le code concernant celle-ci devrait rester avec celle-ci et je pense que "polluer" sa form avec du code qui ne la concerne pas n'est peut être pas le plus judicieux (peu importe la quantité de code).

    Ma priorité a toujours été de bien séparer le code afin de garder une "logique objet" et garantir une évolutivité à l'application mais peut être que je me trompe!?!

  10. #10
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par mic.carrer Voir le message
    Je vois ce que tu veux dire mais..
    Pourquoi?
    Moi j'aurais créer ma classe MaPictureBox car le code concernant celle-ci devrait rester avec celle-ci et je pense que "polluer" sa form avec du code qui ne la concerne pas n'est peut être pas le plus judicieux (peu importe la quantité de code).
    Pour le coup, j'avoue que c'est assez subjectif, je considère qu'un objet qui bouge a l'interieur d'un conteneur ca implique quand même le conteneur.
    Cela étant dit, les évènements sont plutôt à utiliser pour de l'évènementiel entre objets car à l'intérieur d'un même objet c'est le mécanisme d'héritage qui devrait primer. C'est malheureusement un comportement qui est hérité de VB et qui reste en VB.Net (cf le AutoEventWireUp de ASP.Net Webform)

    Citation Envoyé par mic.carrer Voir le message
    Ma priorité a toujours été de bien séparer le code afin de garder une "logique objet" et garantir une évolutivité à l'application mais peut être que je me trompe!?!
    Là dessus tu as tout à fait raison.

  11. #11
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Je pense que l'on est d'accord sur le principe, le truc c'est que l'on ne sais pas comment thierry007 veut utiliser ses picturebox.. Peut-être qu'elles seront plus aptes à "juger" si elles peuvent bouger ou non, peut-être que c'est le container..

    Donc pour moi, si la form1 instancie une form2 qui contient les picturebox,
    c'est plutot la form2 qui abonne les pict aux évènements MouseDown et MouseMove et non pas la form1, car je ne pense pas qu'elle a à voir quelque chose dans l'histoire. Dans la form2, on peut redéfinir l’événement ControlAdded et y abonner les picturebox aux évènements MouseDown et MouseMove.

    Je pense qu'on ne pourra pas répondre plus que l'on ne l'a fait car c'est une question plutôt conceptuelle, il existe plusieurs solutions mais on ne sais pas ce que thierry007 a dans la tête concernant ce point là ^^

  12. #12
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Houla
    Merci d'un suivis pareil

    En fait c'est simple et compliquer

    Ce que je souhaites faire:

    A partie de ma Form1 ( pièces jointe ), j'au un bouton ( Placement sur page )
    Qui ouvrirait la page selcectionnée par le RButton, sur la quelle serait placé les 4 timbres ( dans ce cas) , je pourrais a ce moment placer les Pb sur le document pour la mise en page. Quand il sont placés , j'enregistre la position top et left des Pb dans leur fiches respectives

    Suis-je assez explicite
    Images attachées Images attachées  

  13. #13
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Je pense que, comme Nathanael l'a dit, c'est ton container qui doit donner la possibilité de bouger à tes picturebox.

    En effet, j'imagine que la manière de déplacer ta picturebox changera d'une page (sélectionnée par le RBouton) à une autre, et donc c'est celle-ci qui doit donner les règles à la picturebox, et non l'inverse.

    Du coup, dans chaque page contenant les picturebox, je mettrais les méthodes PictureBox_MouseDown et PictureBox_MouseMove qui définiraient la manière dont se comporte le déplacement, et une méthode AddPictureBox accessible depuis ta form principale qui permettrait d'abonner ta picturebox aux évènements MouseDown et MouseMove.

    Par exemple:

    Dans la form principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Private Sub AddPictInForm2()
            Dim pict As New PictureBox
            '...
     
            Dim frm2 As New Form2
            '...
            frm2.AddPictureBox(pict) '<- On fait passer la picturebox à la page souhaitée
            frm2.Show()
        End Sub

    Dans la Form qui contiendra la picturebox (ici Form2):
    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
     
        Sub AddPictureBox(pict As PictureBox)
            Me.Controls.Add(pict)
            AddHandler pict.MouseDown, AddressOf PictureBox_MouseDown
            AddHandler pict.MouseMove, AddressOf PictureBox_MouseMove
        End Sub
     
        Dim x, y As Integer
     
        Private Sub PictureBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            If TypeOf sender Is PictureBox Then
                If e.Button = Windows.Forms.MouseButtons.Left Then
                    x = e.X
                    y = e.Y
                End If
            End If
        End Sub
     
        Private Sub PictureBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            If TypeOf sender Is PictureBox Then
                If e.Button = Windows.Forms.MouseButtons.Left Then
                    sender.Left += (e.X - x)
                    sender.Top += (e.Y - y)
                End If
             End If
        End Sub

  14. #14
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour thierry007
    Positionner un picturec'est facile.Le probleme n'est pas la.
    Comme dit par Bluedeep les gros ennuis sont là:
    La seule contrainte est que cette manip doit être faite dans le thread qui a instancié la form à laquelle tu ajoutes des Controls.
    Pour positionnter le picbox tu dois utiliser les coordonnees d'ecran et mousedown du picbox.
    voici un exemple avec un Form Parent "owner"
    code exemple :
    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    'ton form "parent" 
    Public Class frmAddPic
        'le picture est cree dans FrmPageBis
        Private newFrm As FrmPage
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            'form de plus haut niveau
            Me.TopLevel = TopLevel
        End Sub
        Private Sub btnCreateFrmPageBis_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreateFrmPageBis.Click
     
            newFrm = New FrmPage()
            'frmAddPic est parent de FrmPage
            newFrm.Owner = Me
            newFrm.Show()
     
            'desactive
            Me.btnCreateFrmPageBis.Enabled = False
     
        End Sub
        'compteure pour ajouter des picturebox 
        Private Shared counterPic As Integer = 0
        Private Sub BtnAddNewPicture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAddNewPicture.Click
            If newFrm Is Nothing Then
                Return
            End If
            Dim rnd As Random = New Random
            counterPic = counterPic + 1
     
     
            Dim clr As Color
            Dim strNomPic As String = String.Empty
     
            strNomPic = "myPic" & counterPic
            clr = Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255))
            newFrm.AddPic(strNomPic, clr)
     
        End Sub
     
     
     
     
    End Class
    'le form "fils" 
    Public Class FrmPage
        'MouseOffset represente position souris
        '-mise constamment à jour- lorsque LeftButton est appuye.
        Private mouseOffset As Point
        Private isMouseDown As Boolean = False
     
        'une variable picbox
        Private currentPB As PictureBox
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            '
            'tu peux activer le scroll si jamais le picbox est deplace 
            'hors fenetre 
            '
            'Me.AutoScroll = True
     
        End Sub
        Public Sub AddPic(ByVal namePic As String, ByVal bckcolor As Color)
            currentPB = New PictureBox
            With currentPB
                .Name = namePic
                .BorderStyle = BorderStyle.Fixed3D
                .Size = New Size(200, 200)
                .Location = New Point(50, 150)
                .BackColor = bckcolor
            End With
            'ajoute les 3 handlers
            AddHandler Me.currentPB.MouseDown, AddressOf commonPB_MouseDown
            AddHandler Me.currentPB.MouseMove, AddressOf commonPB_Move
            AddHandler Me.currentPB.MouseUp, AddressOf commonPB_MouseUp
            Me.Controls.Add(currentPB)
        End Sub
     
        Private Sub commonPB_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            Dim xOffset As Integer
            Dim yOffset As Integer
     
            If e.Button = MouseButtons.Left Then
                xOffset = e.X
                yOffset = e.Y
     
                mouseOffset = Me.PointToClient(New Point(xOffset, yOffset))
                isMouseDown = True
            End If
        End Sub
        'dans MouseMove il faut utiliser des coord. ecrans 
        'car il n' y a pas d'autre choix 
     
        Private Sub commonPB_Move(ByVal sender As Object, ByVal e As System.EventArgs)
     
     
            If isMouseDown Then
                'convertir en coords client fenetre frmPage 
                Dim mousePos As Point = Me.PointToClient(Control.MousePosition)
                'mettre à jour position du picturebox
                Me.currentPB.Location = mousePos
                Me.Refresh()
     
            End If
        End Sub
        Private Sub commonPB_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            ' Changes the isMouseDown field so that the picturebox does
            ' not move unless the user is pressing the left mouse button.
            If e.Button = MouseButtons.Left Then
                isMouseDown = False
            End If
        End Sub
     
     
     
     
    End Class

    bon code...................

  15. #15
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Bonsoir

    Ayant fait qq essais cet aprèm avec l'exemple de -N4w4k- , j'arrive a faire exactement ce que je souhaites, et de plus je récupères les coordonnée top et left des PictureBox afin de les enregistrées et je charge bien l'image du timbre dans chaque Pb.
    Demain je nettoyes un peut le code et je le poste si qq veux une idée globale

    Peut être pas digne d'un grand développeur, mais cela fonctionne tre bien

    encore merci a tous pour le suivit du Post


  16. #16
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Voici ce qui fonctionne ( tres bien )
    Si qq a des commentaires ( constructifs ) ils sont les biens venus

    pour info
    PG_EchelleMmToPixel= conversion px en mm et inverse
    PG_LargeurCadreBandeCristale = largeur en mm
    PG_PathPictureDocument= partie du chemin des images

    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
     Private Sub BtnPlacementDocuments_Click(sender As System.Object, e As System.EventArgs) Handles BtnPlacementDocuments.Click
                Dim MyPicture As String = Nothing
     
                If DgDocuments.Rows.Count > 0 Then
     
                      For i = 0 To DgDocuments.Rows.Count - 1
     
                            pict(i) = New PbTimbres
     
                            If CInt(DgDocuments.Rows(i).Cells("EmplacementX").Value) = 0 Then DgDocuments.Rows(i).Cells("EmplacementX").Value = 100
     
                            If CInt(DgDocuments.Rows(i).Cells("EmplacementY").Value) = 0 Then DgDocuments.Rows(i).Cells("EmplacementY").Value = 150
     
                            If Dir(PG_PathPictureDocument & "\" & Trim(CbAnnee.Text) & "\" & DgDocuments.Rows(i).Cells("NomFichierImage").Value.ToString) = "" Then
     
                                  MyPicture = My.Application.Info.DirectoryPath & "\NoStample.jpg"
                            Else
                                  MyPicture = PG_PathPictureDocument & "\" & Trim(CbAnnee.Text) & "\" & DgDocuments.Rows(i).Cells("NomFichierImage").Value.ToString
                            End If
     
                            With pict(i)
     
                                  .BorderStyle = BorderStyle.FixedSingle
                                  .BackColor = Color.Black
                                  .BorderStyle = BorderStyle.FixedSingle
                                  .BackColor = Color.Black
                                  .Width = (CInt(DgDocuments.Rows(i).Cells("Largeur").Value) / 2) * PG_EchelleMmToPixel + ((PG_LargeurCadreBandeCristale / 2) * PG_EchelleMmToPixel)
                                  .Height = (CInt(DgDocuments.Rows(i).Cells("Hauteur").Value) / 2) * PG_EchelleMmToPixel + ((PG_LargeurCadreBandeCristale / 2) * PG_EchelleMmToPixel)
                                  .Left = (CInt(DgDocuments.Rows(i).Cells("EmplacementX").Value) / 2) * PG_EchelleMmToPixel
                                  .Top = (CInt(DgDocuments.Rows(i).Cells("EmplacementY").Value) / 2) * PG_EchelleMmToPixel
                                  .Load(MyPicture)
                                  .Name = i
                                  .SizeMode = PictureBoxSizeMode.StretchImage
     
                            End With
     
     
     
                            Select Case CInt(DgDocuments.Rows(i).Cells("NumeroPagePlacement").Value)
     
                                  Case 1
                                        FrmPage.Panel1.Controls.Add(pict(i))
     
                                  Case 2
                                        FrmPage.Panel2.Controls.Add(pict(i))
     
                                  Case 3
                                        FrmPage.Panel3.Controls.Add(pict(i))
     
                            End Select
     
                      Next
     
                      FrmPage.Show()
     
                End If
     
          End Sub
     
     
    Public Class PbTimbres
          Inherits PictureBox
     
          Dim x, y As Integer
     
          Private Sub Me_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
     
                If e.Button = Windows.Forms.MouseButtons.Left Then
     
                      x = e.X
                      y = e.Y
     
                End If
     
          End Sub
     
          Private Sub Me_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
     
                If e.Button = Windows.Forms.MouseButtons.Left Then
     
                      sender.Left += (e.X - x)
                      sender.Top += (e.Y - y)
     
                      FrmPage.LblPage1.Text = Me.Left & "/" & Me.Top
     
                End If
     
          End Sub

  17. #17
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Bonjour thierry,

    j'aurais ptet une petite remarque, du même type que les messages précédents.
    Dans ta classe PbTimbres, dans la méthode Me_MouseMove:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FrmPage.LblPage1.Text = Me.Left & "/" & Me.Top
    Je pense que ce n'est pas la picturebox qui doit renommer son container..
    Je pense que le mieux (conceptuellement..) c'est que tu traites l'évènement Move de ta picturebox dans ta form principale ou ta frmpage..

    Un truc du style:

    Dans FrmPage.vb ou dans ta form principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        'dans ta form principale
        AddHandler pict.Move, AddressOf FrmPage.PictureBox_Move
        'ou dans ta FrmPage
        AddHandler pict.Move, AddressOf PictureBox_Move
    Dans FrmPage.vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub PictureBox_Move(sender As Object, e As EventArgs)
        LblPage1.Text = sender .Left & "/" & sender .Top
    End Sub

  18. #18
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    merci -N4w4k-

    C'est juste

    Je m'en vais de ce pas faire cette petite modif : le résultat sera le même dans l'écriture non

    a+

  19. #19
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Oui c'est ça.
    Bon courage pour la suite!

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Creation de liste d'objet dynamique
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 05/12/2008, 14h08
  2. [C#] Accéder à un objet dynamiquement ?
    Par webtheque dans le forum ASP.NET
    Réponses: 10
    Dernier message: 14/04/2005, 15h54
  3. [Reflection] Créer un tableau d'objets dynamiquement.
    Par salome dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/03/2005, 18h59
  4. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00
  5. Evenement sur objet dynamique
    Par CanardJM dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/11/2004, 13h56

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