2015-12-03 6 views
1

В основном я создал класс с методом, который называется каждый раз, когда есть щелчок на моей форме (предполагается провести единую линию, где я щелкнул) она идет следующим образом:Получение формы координат в классе

public void Dessiner(Graphics Fg) 
{ 

    Point p = Form1.MousePosition; 
    Fg.DrawLine(MyPen,p.X,p.Y,p.X+2,p.Y+2); 
} 

Проблема заключается в том, что когда я вызываю этот метод в событии mousedown моей формы, он помещает линию в неправильное место каждый раз.

Примечания: метод может принимать только графики Fg, а чертеж линии ДОЛЖЕН быть выполнен в рамках метода класса.

Что я делаю неправильно?

+0

Где вы получаете Fg от? – DavidG

+0

Извините, что Fg - это экземпляр моей графики, который был объявлен в моей форме: – Fylps

+0

Fg - это экземпляр моего графического класса, который я создал в своей форме так в основном (в форме) Fg = this.createGraphics(); и он используется как параметр для моего метода впоследствии. – Fylps

ответ

1

Вы должны преобразовать координаты с PointToClient()

public partial class Form1 : Form 
{ 
    DrawingHelper dh; 
    public Form1() 
    { 
     InitializeComponent(); 

     dh=new DrawingHelper(this); 

    } 

    private void Form1_MouseDown(object sender, MouseEventArgs e) 
    { 
     dh.Desser(this.CreateGraphics()); 
    } 
} 

public class DrawingHelper 
{ 
    Form form; 
    public DrawingHelper(Form form) 
    { 
     this.form =form; 
    } 
    public void Desser(Graphics Fg) 
    { 
     var pt=form.PointToClient(Form.MousePosition); 
     Fg.DrawLine(Pens.Black, pt.X,pt.Y, pt.X+2, pt.Y+2); 
    } 
} 
+0

Большое спасибо за помощь. Я никогда не понимал, как использовать текущую форму! Отличная помощь от всех !!! – Fylps