2016-11-26 3 views
0

J'essaye de réaliser la peinture d'un rectangle autour du centre de la position mouseClick. Pour cela, je pense que j'ai besoin d'obtenir les coordonnées x et y comme un int.Comment obtenir les coordonnées x et y de mouseClick

(ce code est modifié et e.X ou e.Y est des solutions à cette question)

let mouseClick (e: MouseEventArgs) = 
    let x = e.X 
    let y = e.Y 
    let coords = [|System.Drawing.Point((x-10),(y-10)); 
       System.Drawing.Point((x-10),(y+10)); 
       System.Drawing.Point((x+10),(y+10)); 
       System.Drawing.Point((x+10),(y-10)); 
       System.Drawing.Point((x-10),(y-10))|] 
    window.Paint.Add(fun e -> e.Graphics.DrawLines(pen, coords)) 

window.MouseClick.Add mouseClick 

J'ai essayé d'utiliser la propriété e.Location qui ne fonctionne pas ce qui est logique dans une certaine mesure depuis quand je l'imprime alors il imprime "x = (un certain nombre) y = (un certain nombre)"

Quelqu'un peut-il m'aider à obtenir les coordonnées x et y comme int?

+5

Avez-vous essayé de lire la [documentation] (https://msdn.microsoft.com/fr-fr/library/system.windows.forms.mouseeventargs (v = vs.110) .aspx # Anchor_3)? il y a 'eX' et' e'' (et même si non 'e.Location' est de type' Point' qui a aussi les propriétés 'X' et' Y') – Sehnsucht

+0

Ce que je ne comprends pas bien, c'est que 'mouseClick 'a le type' MouseEventArgs -> Point [] 'et pourtant dans la dernière ligne vous l'utilisez comme une valeur de type' Point [] '. N'oublies-tu pas de lui appliquer un argument? – Sehnsucht

+0

J'ai édité mon code à autre chose. Sehnsucht. S'il vous plaît nu avec moi. Je suis allé en F # et winforms il y a deux jours. J'essaie toujours de comprendre les bases. Cependant, le nouveau code pose également un problème. Cela dessine en effet un rectangle à la position désirée mais je dois minimiser et agrandir la fenêtre afin de l'actualiser. Mais je suppose que c'est un problème pour une autre question. – Nulle

Répondre

4

Comme indiqué dans le commentaire, pour obtenir la position de la souris à partir d'un MouseEventArgs il vous suffit d'accéder à ses X ou Y propriétés
qui reflète seulement les Location.X et Location.Y propriétés sont également disponibles sur e

En ce qui concerne votre édition et votre commentaire supplémentaire, je pense que vous avez fait quelque chose de mal en ajoutant un nouveau gestionnaire Paint avec chaque clic et vous avez juste besoin de dessiner (ce qui nécessite probablement encore un Refresh à un moment donné)

let mouseClick (e: MouseEventArgs) = 
    let x = e.X 
    let y = e.Y 
    let coords = [| System.Drawing.Point(x - 10, y - 10) 
        System.Drawing.Point(x - 10, y + 10) 
        System.Drawing.Point(x + 10, y + 10) 
        System.Drawing.Point(x + 10, y - 10) 
        System.Drawing.Point(x - 10, y - 10) |] 

    // maybe use instead of let ? 
    let g = window.CreateGraphics() 
    g.Graphics.DrawLines(pen, coords) 

window.MouseClick.Add mouseClick