2012-08-30 142 views
0

我是使用Windows窗體和C#繪製任何東西的初學者,我有一個問題(我無法在互聯網上找到答案)。所以這裏是我的問題:我試圖建立簡單的應用程序,我使用trackbar來操縱矩形的大小。在Windows窗體中繪圖

namespace Drawing 
{ 
    public partial class Form1 : Form 
    { 
     int size = 10; 
     public Form1() 
     { 
      InitializeComponent(); 
      CenterToScreen(); 
     } 

     protected override void OnPaint(PaintEventArgs pe) 
     { 

      Graphics g = pe.Graphics; 
      Rectangle rect = new Rectangle(50,50, size,size); 
      LinearGradientBrush IBrush = new LinearGradientBrush(rect, Color.Green, Color.Yellow, 
       LinearGradientMode.BackwardDiagonal); 
      g.FillRectangle(IBrush, rect); 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void Form1_Paint(object sender, PaintEventArgs e) 
     { 

     } 

     private void trackBar1_Scroll(object sender, EventArgs e) 
     { 
      size = trackBar1.Value; 
// I was trying to put here OnPaint method but it doesnt work. 
     } 


    } 
} 

而我只是不能弄清楚如何在tracBar1_Scroll發生時調用OnPaint方法?有什麼建議麼?先謝謝你。

回答

3

致電this.Invalidate()這將觸發使OnPaint熄滅的事件。

+0

非常感謝,它的工作:) –

+0

不要忘記接受爲答案! :-) –

2

一種可能性將您的繪圖代碼放入一個單獨的函數中,該函數從Form1_PainttrackBar1_Scroll中調用。

該方法將採用Graphics對象作爲參數。事情是這樣的:

private void DrawStuff(Graphics g) 
{ 
    // your drawing logic goes here 
} 

然後modify _Paint_Scroll如下:

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    DrawStuff(e.Graphics); 
} 

private void trackBar1.Scroll(object sender, EventArgs e) 
{ 
    Graphics g = this.CreateGraphics(); 

    DrawStuff(g); 

    g.Dispose(); 
} 

或者,你可以強迫你的表格無效這也將引發_Paint被稱爲:

private void trackBar1.Scroll(object sender, EventArgs e) 
{ 
    this.Invalidate(); 
} 

請注意,Invalidate()有6個重載,它允許你不同程度的控制什麼需要invalidat編輯繪圖。

+0

它實際上並沒有爲我工作。我的意思是,當我向上滾動軌跡線時,它正在製作矩形,但是當我向下滾動而不是修改矩形的大小時,會形成另一個矩形。 –

+0

我使用Chris Hutchinson的解決方案完成了這項工作(http://stackoverflow.com/questions/4124638/how-to-delete-a-drawn-circle-in-c-sharp-windows-form)。感謝我的問題的這個想法。 –