EventArgs et MouseEventArgs [Résolu]

cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 5 févr. 2012 à 10:46 - Dernière réponse : cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention
- 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
Afficher la suite 

Votre réponse

23 réponses

Meilleure réponse
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 5 févr. 2012 à 18:09
3
Merci
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

Merci cs_JLuc01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_JLuc01
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 5 févr. 2012 à 11:14
0
Merci
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 5 févr. 2012 à 11:32
0
Merci
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
Commenter la réponse de ucfoutu
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 5 févr. 2012 à 12:26
0
Merci
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
Commenter la réponse de cs_JLuc01
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 5 févr. 2012 à 12:37
0
Merci
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
Commenter la réponse de cs_ShayW
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 5 févr. 2012 à 13:16
0
Merci
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
Commenter la réponse de cs_JLuc01
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 5 févr. 2012 à 14:08
0
Merci
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
Commenter la réponse de cs_Galain
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 5 févr. 2012 à 14:19
0
Merci
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
Commenter la réponse de cs_Galain
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 5 févr. 2012 à 14:35
0
Merci
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
Commenter la réponse de cs_Galain
NHenry 14274 Messages postés vendredi 14 mars 2003Date d'inscription 18 octobre 2018 Dernière intervention - 5 févr. 2012 à 14:37
0
Merci
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
Commenter la réponse de NHenry
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 5 févr. 2012 à 15:56
0
Merci
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
Commenter la réponse de cs_ShayW
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 5 févr. 2012 à 16:07
0
Merci
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
Commenter la réponse de cs_JLuc01
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 5 févr. 2012 à 16:15
0
Merci
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
Commenter la réponse de cs_Galain
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 5 févr. 2012 à 16:31
0
Merci
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
Commenter la réponse de cs_JLuc01
NHenry 14274 Messages postés vendredi 14 mars 2003Date d'inscription 18 octobre 2018 Dernière intervention - 5 févr. 2012 à 17:12
0
Merci
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
Commenter la réponse de NHenry
NHenry 14274 Messages postés vendredi 14 mars 2003Date d'inscription 18 octobre 2018 Dernière intervention - 5 févr. 2012 à 18:16
0
Merci
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
Commenter la réponse de NHenry
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 5 févr. 2012 à 20:51
0
Merci
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)
Commenter la réponse de cs_ShayW
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 5 févr. 2012 à 21:30
0
Merci
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
Commenter la réponse de cs_JLuc01
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 5 févr. 2012 à 21:36
0
Merci
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
Commenter la réponse de cs_ShayW
cs_JLuc01 208 Messages postés samedi 17 janvier 2009Date d'inscription 5 mars 2013 Dernière intervention - 5 févr. 2012 à 21:49
0
Merci
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
Commenter la réponse de cs_JLuc01

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.