2013-06-27 19 views
0

我有這樣的代碼如何導航到Windows生成的控件?

private void picturebox1_Paint(object sender, PaintEventArgs e) 
    { 
     if (Percent == 100) 
     { 
      e.Graphics.DrawString("Completed!", font, Brushes.Black, new Point(3, 2)); 
     } 
    } 

而且我想如果導航從這裏:

public void Complete() 
{ 
    picRooms_Paint();//How can I reach picRooms_Paint from here and draw the string? 
} 

任何幫助,將不勝感激!

+0

爲什麼不設置'Text'呢?除非你想要某種自定義繪製的字符串。順便說一句,你的picRooms是什麼?一個pictureBox? –

+0

您可能想要做的是使picRooms無效,以便啓動Paint事件。我認爲這是像picRooms.Invalidate(); –

+1

這些方法是如何實現的?他們在同一班嗎?另外,在上面的例子中,你的方法調用'picRooms_Paint()'**不起作用。最初你傳遞了兩個重載'object sender,PaintEventArgs e',並且在第二個方法中沒有遵循相同的模式。 – Brian

回答

0

從你的例子中不清楚picRooms是什麼,所以我不能告訴你如何從別處訪問它的圖形。

雖然作爲一般的API改進,最好將功能代碼從事件處理程序移出到一個方法中,其中可以被重用;

private void DrawComplete(Graphics g) 
{ 
    if (Percent == 100) 
    { 
     g.DrawString("Completed!", font, Brushes.Black, new Point(3, 2)); 
    } 
} 

現在你可以調用這個方法在任何地方;

,在你的榜樣,因爲 Complete沒有別的,你不妨仿效這一做法,而是把功能代碼 Complete
private void picRooms_Paint(object sender, PaintEventArgs e) 
{ 
    DrawComplete(e.Graphics) 
} 

public void Complete() 
{ 
    DrawComplete(this.CreateGraphics()); 
} 

也沒什麼看頭,不添加其他方法我已經在路上。

+0

令人驚歎的想法,然後我可以將圖形加載到picturebox! 非常感謝! – Emalton

+0

我想你會發現當你進入它時,這會變得更加複雜;當表單被繪製時,PictureBox可能只是重繪自己,這取決於你已經進行了哪些其他代碼。 –

+0

是的,我無法將圖形加載到圖片框中。 我希望它繼續嘗試,直到百分比在100如果可能。 – Emalton