EventArgs et MouseEventArgs

Résolu
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 - 5 févr. 2012 à 10:46
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 - 5 févr. 2012 à 22:35
Bonjour,

J'utilise un Trackbar et je voudrais appeler l'evenement PictureMouseMove (.EventArgs et .MouseEventArgs).
En bref:

Private Sub WidthTrackBar_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles WidthTrackBar.Scroll
        Dim pict As Control
        Dim img As PictureBox
        For Each pict In Me.Controls
            If TypeOf pict Is PictureBox Then
                img = CType(pict, PictureBox)
                If img.BorderStyle = BorderStyle.Fixed3D Then
                    img.Width = WidthTrackBar.Value
                    Call PictureMouseMove(img, e) '<===============Probleme!
                End If
            End If
        Next
        WidthTextBox.Text = WidthTrackBar.Value.ToString
End Sub


Probleme:
Option Strict On disallows implicit conversions from 'System.EventArgs' to 'System.Windows.Forms.MouseEventArgs'

Je pense comprendre le probleme, mais je ne vois pas comment le resoudre ou le contourner.
Toute suggestion est la bienvenue.
Merci,

JLuc01

23 réponses

cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
5 févr. 2012 à 18:09
Henry, utiliser le mot New, d'accord, mais apres.. je fais quoi.
Je ne suis pas sur d'etre sur la meme longueur d'onde.

De toute facon, j'ai trouve un element de reponse en suivant l'idee de ShayW.
Je n'ai plus a utilise la procedure PictureMouseMove.

Voici le code:
Private Sub WidthTrackBar_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles WidthTrackBar.Scroll
        Dim pict As Control
        Dim img As PictureBox
        For Each pict In Me.Controls
            If TypeOf pict Is PictureBox Then
                img = CType(pict, PictureBox)
                If img.BorderStyle = BorderStyle.Fixed3D Then
                    If (img.Width + img.Left) < Me.Width Then ' img.Width + img.Left = img.Right
                        img.Width = WidthTrackBar.Value
                    Else
                        WidthTrackBar.Value = img.Width
                    End If
                End If
            End If
        Next
        WidthTextBox.Text = WidthTrackBar.Value.ToString
    End Sub


Il y a encore un petit detail a arranger, mais je devrais pouvoir me debrouiller.
J'ai des difficultees a reduire l'image avec le Trackbar quand l'image est collee sur le cote droit.

Je clos le thread, mais si vous avez encore des commentaires constructifs, n'hesitez pas.
Encore merci a tous,
JLuc01
1
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 févr. 2012 à 11:14
Bonjour,
tu as toi-même pointé du doigt la raison :
e (quand passé), est du type System.EventArgs et tu le passe sous ce type à une procédure attendant un System.Windows.Forms.MouseEventArgs
Ne connais pas .Net ===>> toi oui === >> a toi de reconvertir (en variable toto) e en System.Windows.Forms.MouseEventArgs et de passer toto au Mouse_move. Si et seulement si conversion Possible !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 févr. 2012 à 11:32
Je me demande d'ailleurs s'il ne serait pas suffisant d'envoyer un Empty à ton Mouse_Move.
Je dis peut-être une bêtise, mais essaye quand-même :
Call PictureMouseMove(img, System.Windows.Forms.MouseEventArgs.Empty)
à voir comment passer ce Empty ? avec un ., comme ici, ou autrement ? ===>> regarde


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
5 févr. 2012 à 12:26
Oui, en effet, j'ai deja essaye:
Call PictureMouseMove(img, Nothing)

A priori, il n'y a pas d'erreur (avec le Option Strict On) dans le cas ci-dessus, mais je crois que j'ai besoin de ce "e" que j'utilise dans l'evenement PictureMouseMove:
Private Sub imgPictureMouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim pt As New Point
        pt = e.Location
       '...code...


D'ailleur, je ne suis pas sur de comprendre exactement ce que signifie e: MouseEventArgs n'est pas tres parlant pour moi.
Pour sender, c'est plus clair. J'envois un object (Picturebox).

Pour info, je suis chimiste et pas un pro de VB.net, mais cela m'amuse et m'irrite quelquefois.
POO en VB.net est assez challenging, mais j'apprends tout les jours.
Merci toutefois de votre aide.

JLuc01
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
5 févr. 2012 à 12:37
Salut

essaye
Private Sub WidthTrackBar_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
       
        For Each pict In me.Controls
            If TypeOf pict Is PictureBox Then
                If DirectCast(pict, PictureBox).BorderStyle = BorderStyle.Fixed3D Then
                    DirectCast(pict, PictureBox).Width = DirectCast(sender, TrackBar).Value
                    Call PictureMouseMove(DirectCast(pict, PictureBox), CType(e, MouseEventArgs))
                End If
            End If
        Next
 WidthTextBox.Text = WidthTrackBar.Value.ToString

    End Sub


que dois tu obtenir quand je bouge le trackbar
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
5 févr. 2012 à 13:16
Salut ShayW,

J'ai essaye ton code et j'ai l'erreur suivante:
Unable to cast object of type 'System.EventArgs' to type 'System.Windows.Forms.MouseEventArgs'
sur la ligne:
Call PictureMouseMove(DirectCast(pict, PictureBox), CType(e, MouseEventArgs))


J'avoue pas tout comprendre.

En fait, quand je bouge la TrackBar, j'agrandie l'image (Width dans le cas present).
Mon but est d'utiliser l'evenement PictureMouseMove pour empecher l'image de grandir en dehors de mon cadre.

Comme tu as repondu a une de mes questions precedentes, tu te souviens peut-etre que je bouges une image sur un Panel/Form avec l'evenement PictureMouseMove dans un cadre precis pour que l'image ne sorte pas.

Je pensais faire quelquechose du genre:
Call PictureMouseMove(DirectCast(pict, PictureBox), lastMouseLocation)

pour envoyer la location de l'image a mon evenement PictureMouseMove, mais cela ne marche pas.

Mon probleme principal, je crois, c'est de comprendre comment utiliser ce parametre e. C'est pas clair.

JLuc01
0
Profil bloqué
5 févr. 2012 à 14:08
Salut

Je vais peut-être dire une bétise mais pour moi les 2 "e" ne sont pas identiques
Ce paramètre sert à indiquer un supplément d'information à l'évènement demandé !
Dans le cas d'un Click sur un bouton avec la souris on peut différencier le bouton droit et le bouton gauche par exemple !
Reprenons ton cas :

Le e de la procédure WidthTrackBar_Scroll est propre à cette procédure et le e de PictureMouseMove est un autre e qui n'a rien n'a voir avec le premier !
Ce n'est pas e qu'il faut mettre en paramètre pour PictureMouseMove mais une valeur ou une variable qui est fonction de ce paramètre !
Je cherche plus amples informations pour t'aider !


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Profil bloqué
5 févr. 2012 à 14:19
essaie de remplacer Call PictureMouseMove(img, e) par Call PictureMouseMove(img, img.MouseMove)
Attention img.MouseMove n'est pas certain ! Il faut trouver quel type d'évènement la fonction attend !
Ce type d'évènement est ensuite utilisable avec le paramètre e dans le code de la fonction elle-même

Je continue mes recherches !

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Profil bloqué
5 févr. 2012 à 14:35
Pour comprendre le rôle du paramètre e
http://msdn.microsoft.com/fr-fr/library/system.windows.forms.mouseeventargs%28v=vs.80%29.aspx

Or comment le définir dans l'appel d'une Sub : pas évident

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 févr. 2012 à 14:37
Bonjour,

Je résume le problème de ce que j'ai compris :
- Tu veux à partir d'un évènement appeler un autre évènement en lui passant des paramètre.

2 solutions :
- Instancier toi-même un MouseEventArgs et lui définir ses propriétés
- Faire une méthode qui prend en paramètre les données en type plus basiques (Point, Integer, ...) et faire appel à cette méthode dans les 2 évènements.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
5 févr. 2012 à 15:56
Ce que tu veux faire ce n'est facile
la dimension de ton picturebox va changer
mais l'image non
selon les tes demandes tu peux avoir plusieurs
images donc toutes les pictureboxes seront
traités en meme temps
 img.Width = WidthTrackBar.Value

la tu changes carrément la largeur
supposons que ton picturebox est de
200 * 200
ton trackbar min = 10
au premier scroll vers la droite l'évenement
scroll est detecté
donc img.width = 10
et le picturebox à disparu
plutot
img.Width += WidthTrackBar.Value/code
en plus ce n'est pas seulement ça
si tu traine le tracbar vers la gauche tu veux
diminuer
il faut conserver la valeur du trackbar
pour savoir si il faut
img.Width += WidthTrackBar.Value

ou
img.Width -= WidthTrackBar.Value/code/code

et pour verifier si ton picturebox ne dépasse
pas la form tu n'as pas besoin du mousemove
verifie si la largeur > me.width
j'ai ici quelque chose ce n'est pas au point
Public Class Form1
    Private xp, yp As Integer
    Private thescrollwidth As Integer
    Private listpic As New List(Of PictureBox)
    Private lastmouselocation As New Point

    Private Sub OpenFileDialog1_FileOk(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
        Dim mypic As New PictureBox
        With mypic
            .BackgroundImage = Image.FromFile(OpenFileDialog1.FileName)
            .BackgroundImageLayout = ImageLayout.Stretch
            .Location = New Point(xp, yp)
            .BorderStyle = BorderStyle.Fixed3D
            .Width = .BackgroundImage.Width
            .Height = .BackgroundImage.Height

            xp += .Width
            If xp > Me.Width Then
                xp = 1
                yp += .Height
                If yp > Me.Height Then
                    MessageBox.Show("your panel is full")
                    Exit Sub
                End If
            End If
            AddHandler mypic.MouseMove, AddressOf mypicmousemove
            AddHandler mypic.MouseDown, AddressOf mypicMouseDown

        End With
        listpic.Add(mypic)
        Me.Controls.Add(mypic)
    End Sub


    Private Sub Button1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseClick
        OpenFileDialog1.ShowDialog()
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        xp = 1
        yp = 1
        Button1.Location = New Point(1, 1)
        Me.Location = New Point(10, Button1.Bottom + 1)
       
        TrackBar1.Left = Me.Width \ 2 - TrackBar1.Width \ 2
        TrackBar1.Top = Me.Bottom - 2 * TrackBar1.Height
        thescrollwidth = TrackBar1.Maximum
    End Sub

    Private Sub mypicmousemove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim pt As New Point
        pt = e.Location
        If e.Button = Windows.Forms.MouseButtons.Left Then

            pt.X = (pt.X + DirectCast(sender, PictureBox).Left) - lastmouselocation.X
            pt.Y = (pt.Y + DirectCast(sender, PictureBox).Top) - lastmouselocation.Y
            If pt.X < 0 Then

                pt.X = 0
            End If
            If pt.Y < 0 Then
                pt.Y = 0
            End If
            If pt.X > Me.Width - DirectCast(sender, PictureBox).Width Then
                pt.X = Me.Width - DirectCast(sender, PictureBox).Width
            End If
            If pt.Y > Me.Height - DirectCast(sender, PictureBox).Height Then
                pt.Y = Me.Height - DirectCast(sender, PictureBox).Height
            End If
            DirectCast(sender, PictureBox).Location = pt
            DirectCast(sender, PictureBox).BringToFront()
        End If
    End Sub
    Private Sub mypicMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        lastmouselocation = e.Location
    End Sub

    Private Sub TrackBar1_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
        Dim widthpic As Integer

        For Each pict In Me.Controls
            If TypeOf pict Is PictureBox Then
                If DirectCast(pict, PictureBox).BorderStyle = BorderStyle.Fixed3D Then
                    'on saisi la width de l'image
                    If thescrollwidth < DirectCast(sender, TrackBar).Value Then
                        thescrollwidth = DirectCast(sender, TrackBar).Value
                        widthpic = DirectCast(pict, PictureBox).Width + DirectCast(sender, TrackBar).Value
                    Else
                        thescrollwidth = DirectCast(sender, TrackBar).Value
                        widthpic = DirectCast(pict, PictureBox).Width - DirectCast(sender, TrackBar).Value
                    End If

                    If widthpic < Me.Width Then
                        DirectCast(pict, PictureBox).Width = widthpic
                    End If

                End If
            End If
        Next


    End Sub
End Class
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
5 févr. 2012 à 16:07
Merci a tous pour votre aide.

Alain, je suis d'accord, les 2 "e" ne sont pas identiques comme le suggere le titre (EventArgs et MouseEventArgs), c'est cela mon probleme. Peut-etre apres tout, ce que je veux faire n'est pas possible?
En essayant ton bout de code, j'ai un message d'erreur qui me demande de "Raise an event", et la je vais dans un domaine inconnu (en fait une tres vague idee de ce qu'il faut faire). De plus, la procedure, je l'ai deja, puisqu' elle est associe a une PictureBox creee dynamiquement:
        AddHandler myPicture.MouseMove, AddressOf PictureMouseMove

Merci pour le lien, 'jy jeterais un oeil.

Henry, je suis persuade que tu me dirige dans la bonne direction, mais je ne sais pas comment instancier un MouseEventArgs. Si tu as des exemples ou lien internet, je suis preneur.

J'avais pense a quelquechose de similaire a ta deuxieme solution (enfin je crois), mais ma premiere idee etait de faire quelquechose de simple, c'est a dire utilise une procedure que j'ai deja. En fait, ce n'est pas si simple.

Mais, je trouverais une solution, c'est qu'une question de temps.
Merci encore,

JLuc01
0
Profil bloqué
5 févr. 2012 à 16:15
c'est bien cela le problème : quoi mettre en paramètre pour le "e" de la procédure à l'appel ?

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
5 févr. 2012 à 16:31
ShayW, je viens d'essayer ton code et cela met le bordel (excusez mon vocabulaire!), mais je retiens l'idee qui m'evite de faire appel a une procedure PictureMouseMove qui parait difficilement accessible dans mon cas. De plus, a un certain moment, l'image avait bloquee sur le cote droit, mais pas pour longtemps: rien de robuste.

Je crois que je vais essayer de creuser dans cette direction, excepte si Henry revient avec une orientation plus interessante.

Merci,
JLuc01
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 févr. 2012 à 17:12
Bonjour,

"Henry, je suis persuade que tu me dirige dans la bonne direction, mais je ne sais pas comment instancier un MouseEventArgs. Si tu as des exemples ou lien internet, je suis preneur. "

Comme pour toutes les classes, avec le mot clé New.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
5 févr. 2012 à 18:16
Bonjour,

Dim MonObjet as MouseEventArgs=New MouseEventArgs
MonObjet.QuelqueChose=UneValeur
MaFonction(MonObjet)

A moins que je n'ai pas compris le problème.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
5 févr. 2012 à 20:51
Tu peux expliquer ce que tu veux faire

sur la form tu as placé un picturebox avec une image
disons de taille 100 * 100

je fais défiller le trackbar vers la droite
que veux tu qu'il se passe
le picturebox reste à la meme position
mais que sa taille = trackbar.value
donc si ton trackbar.value = au meme moment
2 ou 10 ou 40 tu ne vas pas voir ta picturebox
grandir de façon continue

ou bien
le picturebox s'accroit de façon continue
100 * 100 (100+1) * (100+1) (100+2)*(100+2)
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
5 févr. 2012 à 21:30
Henry, MouseEventArgs utilise comme une classe! C'est interessant.
Par curiosite, as-tu un petit example (ou lien) ou tu appliquerais ce genre de code?
En general, je travaille beaucoup par l'exemple, puis je m'adapte.
Sinon, je reflechirais ce que je pourrais faire avec ce genre de code. Mais pour l'instant, je suis satisfait de ce que j'ai.

ShayW, je cree dynamiquement des PictureBox sur une Form, puis je les arranges comme je veux dans un cadre precis avec la possibilite d'agrandir et de retrecir les images avec 2 Trackbars (Width et Height), le point de base Top-Left ne bougeant pas.
Dans le cas present, le Trackbar marche tres bien, sauf que lorsqu'il est accole sur le cote droit, il se bloque. Un point de detail que j'espere resoudre bientot.

A+
JLuc01
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
5 févr. 2012 à 21:36
je n'ai toujours pas compris avec ton code
comment l'image grandit

If (img.Width + img.Left) < Me.Width Then ' img.Width + img.Left = img.Right
                        img.Width WidthTrackBar.Value


le img prend la valeur du trackbar
0
cs_JLuc01 Messages postés 206 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 mars 2013 1
5 févr. 2012 à 21:49
ShayW, oui, img.Width prend la valeur du Trackbar.
Le Trackbar a les proprietes Minimum (30) et Maximum (600), et la PictureBox (img) a au depart une valeur de 150 (Width), donc le Trackbar est a 150 au depart.

JLuc01
0
Rejoignez-nous