2012-08-30 2 views
0

저는 Windows Forms 및 C#을 사용하여 그림을 그리는 초보자이며 질문이 있습니다 (인터넷에서 대답을 찾을 수 없습니다). 그래서 여기 내 문제가 있습니다 : 나는 트랙볼을 사용하여 사각형의 크기를 조작하는 간단한 응용 프로그램을 작성하려고합니다.Windows Forms에서 그리기

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

답변으로 동의하는 것을 잊지 마십시오! :-) –

0

당신은 또한이 링크를 살펴이 있어야합니다

http://msdn.microsoft.com/en-us/library/system.windows.forms.trackbar.aspx

는 모든 사용자가 같은 InvokePaintBackground 방법으로 유용하게 찾을 수있는 트랙 바에 대한 정보 또는 BackColour

+0

그는 트랙 바 자체를 다시 그리지 않고 폼의 내용을 다시 채우려 고하고 있다고 생각합니다. –

+0

그래, 나는 양식의 내용을 rezising 생각했다. –

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 가지 과부하가 있으며이 오버로드를 통해 무엇이 필요한지 제어 할 수 있습니다. 그림 그리기.

+0

그것은 실제로 나를 위해 일하지 않았다. 나는 그것이 트랙볼을 위로 스크롤 할 때 사각형을 만들었지 만, 내가 사각형 대신에 아래로 스크롤 할 때 사각형의 크기를 수정하면 다른 것을 만듭니다. –

+0

Chris Hutchinson (http://stackoverflow.com/questions/4124638/how-to-delete-a-drawn-circle-in-c-sharp-windows-form)의 솔루션을 사용하여이 작업을 만들었습니다. 내 문제에 대한이 아이디어에 감사드립니다. –

관련 문제