2015-05-12 28 views
0

這段代碼在不同的委託中工作得很好,但當它被一個按鈕觸發時,它不起作用。 「Draw_Click」是一個名爲「Draw」的按鈕,它應該根據預先製作的點陣在屏幕上繪製圖形。按下按鈕觸發時無法使DrawLine工作。

private void Draw_Click(object sender, EventArgs e) 
    { 
     Graphics myInstance = this.CreateGraphics(); 

     for (int t = 0; t <= numberOfPoints - 1; t++) 
     { 
      myInstance.DrawLine(pen, spiroArray[0, t], spiroArray[1, t], spiroArray[0, t + 1], spiroArray[1, t + 1]); 
     } 

    } 

但是,當我在這個類中有相同的代碼,它工作正常(減去myInstance線)。

private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
    } 

我用「e」而不是「myInstance」來使這個問題儘可能簡短。

基本上,Form1_Paint有什麼特別之處?我不應該讓它在特殊的Form1Paint類之外繪製一些東西嗎?如果我使用Form1_Paint,則無法控制它在何時執行繪圖。基本上,我想有它更新圖形用戶更改參數等

的錯誤是「錯誤1名‘的DrawLine’在目前情況下不存在」

感謝您的幫助。

+0

它與'this'說明符有關;它可能指的是函數中錯誤的上下文。嘗試使用其實際全名識別對象。 –

+0

@Jung-Paul在Winforms中使用'this'是很常見的,它指的是引發'Click()'事件的形式。 – DrewJordan

+0

@DrewJordan:好的,不知道。謝謝。 –

回答

0

我不確定我是否正確地得到您的問題,因爲如果我按照我的想法閱讀您的問題和代碼,您應該得到的錯誤是「筆」在當前上下文中不存在。如果您使用相同的代碼進行繪製,則它將在button_click或form_paint事件上起作用。 「this」仍然會引用表單,並使用它來實例化一個圖形對象將使您可以在表單中的任何位置進行繪製。從按鈕點擊處理程序或表單繪製方法。但是,唯一能想到的是,如果你從未定義過鋼筆,就會失敗。這裏是我使用的代碼,當表單首次出現時,它畫了一條紅線,然後當我點擊我放在同一表單上的按鈕時畫了一條黑線。

private void button1_Click(object sender, EventArgs e) 
    { 
     Graphics myInstance = this.CreateGraphics(); 
     myInstance.DrawLine(Pens.Black, 15, 10, 25, 20); 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Graphics myInstance = this.CreateGraphics(); 
     myInstance.DrawLine(Pens.Red, 10, 10, 20, 20); 
    } 

在你的問題的陳述中必須有一些不正確的東西。

+0

我做了鋼筆字段,因此它是範圍內的類寬。所以,我不認爲就是這樣。 – user3832863

+0

不知道還有什麼要告訴你。你說「我用'e'代替'myInstance'只是爲了使這個問題儘可能簡短。」所以我認爲我沒有看到實際上給你錯誤的代碼。你在這裏顯示的代碼在draw_click事件處理程序中應該可以在該處理程序或form_paint處理程序中正常工作。 – AgapwIesu