2015-12-03 79 views
1

基本上我已經創建了一個名爲每次有我的窗體上的點擊方法的類(它應該畫在那裏我點擊了一個單行),它進入如下:獲取Form類內的座標

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

你在哪裏得到蛋白原變換座標? – 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