2016-11-26 1 views
0

Я пытаюсь добиться рисования прямоугольника вокруг центра положения мыши. Для этого я чувствую, что мне нужно получить координату x и y как int.Как получить координату x и y mouseClick

(Это редактируется код и e.X или e.Y это решение этого вопроса)

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 

Я попытался с помощью e.Location свойства, которое не работает, которая имеет смысл, в некоторой степени, так как, когда я напечатать то он печатает «x = (некоторое число) y = (некоторое число)»

Может ли кто-нибудь помочь мне получить координату x и y как int?

+5

Вы пытались прочитать [документацию] (https://msdn.microsoft.com/en-us/library/system.windows.forms.mouseeventargs (v = vs.110) .aspx # Anchor_3)? существует 'eX' и' eY' (и даже если не 'e.Location' имеет тип' Point', который также имеет свойства 'X' и' Y') – Sehnsucht

+0

Что я не совсем понимаю, так это то, что 'mouseClick 'имеет тип' MouseEventArgs -> Point [] ', и все же в последней строке вы используете его как значение типа' Point [] '. Разве вы не забудете применить некоторые аргументы? – Sehnsucht

+0

Я редактировал свой код для чего-то другого. Sehnsucht. Пожалуйста, со мной. Два дня назад я вошел в F # и winforms. Все еще пытаюсь понять основы. Новый код, однако, также вызывает проблему. Это действительно рисует прямоугольник в нужном месте, но я должен минимизировать и максимизировать окно, чтобы получить его, чтобы обновить окно. Но я думаю, это проблема для другого вопроса. – Nulle

ответ

4

Как указано в комментарии, чтобы получить позицию мыши из MouseEventArgs просто нужно открыть его X или Y свойства
который просто отражает Location.X и Location.Y свойства также доступны на e

Что касается правки и ваш дополнительный комментарий, я думаю, что вы сделали что-то не так, добавив новый обработчик Paint с каждым щелчком, и вам просто нужно рисовать (что, вероятно, по-прежнему требует Refresh в какой-то момент)

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