2009-08-25 10 views
3

나는 누군가 내가 나를 도울 수 있기를 바랄 수있는 이상한 드로잉 인공물을 가지고 있습니다.수동 페인팅 문제

기본적으로 나는 제대로 작동하지 않은 그라데이션 배경이 있어야하는 왼쪽 도킹 패널이 있습니다. 나는 패널 왼쪽 도킹

screenshot http://img509.imageshack.us/img509/5650/18740614.png

디버깅을 위해 색상을 변경하고, 그 위에 투명한 컨트롤 (투명 컨트롤이 제대로 그려진 된 곳에 따라서는 가장자리를 따라 빨간색의 작은 스텁을 볼 수있다했습니다 , 배경색 선택).

그러나 패널의 크기를 느리게 조절하면 아래쪽에 빨간 선이 남게되어 노란색으로 채워질 것으로 예상됩니다. 이것의

// Construction 
sidePanel.Paint += new PaintEventHandler(OnPaint); 

private void OnPaint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
    Panel pb = sender as Panel; 
    PaintControl(pb.Width, pb.Height, sender, e, true); 
} 

private static void PaintControl(int width, int height, object sender, PaintEventArgs e, bool sidebar) 
{ 
    Rectangle baseRectangle = new Rectangle(0, 0, width -1, height-1); 

    using (LinearGradientBrush gradientBrush = new LinearGradientBrush(baseRectangle, WizardBaseForm.StartColour, WizardBaseForm.EndColour, 90)) 
    { 
     e.Graphics.Clear(Color.Yellow); 
     e.Graphics.DrawRectangle(Pens.Red, baseRectangle); 
     e.Graphics.FillRectangle(Brushes.Yellow, baseRectangle); 
    } 
} 

protected override void OnResize(EventArgs e) 
{ 
    base.OnResize(e); 
    this.Invalidate(); 
} 

전체적인 효과는 제가 크기를 조정할 때 나는 좋은 단색, 또는 좋은 그라데이션 채우기 중 하나를받지 못했습니다이다 다음과 같이 내가 사용하는 코드입니다. 새로운 기능 (InitializeComponents 후) 다음

답변

3

는 생성자에서 다음 패널에서 파생 및 장소 :

this.SetStyle(ControlStyles.AllPaintingInWmPaint 
       | ControlStyles.OptimizedDoubleBuffer 
       | ControlStyles.ResizeRedraw 
       | ControlStyles.DoubleBuffer 
       | ControlStyles.UserPaint 
       , true); 
+0

충분합니다. 매력처럼 작동합니다. 나는 아직도 원래의 문제가 왜 그 자체를 드러 냈는지 이해하지 못한다. – Ian

+0

크기를 조정할 때 페인트 이벤트가 발생하지 않기 때문입니다. 따라서 ResizeRedraw로 강제해야합니다. 나머지는 강제적이지는 않지만 작은 방법으로 개선하는 데 도움이됩니다. 이전에 양식이 깜박이는 것은 패널이 아닌 양식의 스타일을 설정했기 때문입니다. 그것은 재미있는 세계, 수동 그림 세계! – ThePower

1

추가 :

this.SetStyle(ControlStyles.ResizeRedraw, true); 

이 크기 조정에 그림을 보장하는 것입니다.

시도 할 수있는 추가 스타일은 거의 없지만 (AllPaintingInWmPaint, UserPaint ...) 사용자 설정에 따라 설정해야하는지 여부는 특수한 경우와 원하는 작업에 따라 다릅니다. Paint 이벤트에서 모든 그림이 당신에 의해 수행되는 경우, 나는 그들을 설정할 것입니다. 나는 당신의 자신의 패널을 만드는 제안

+0

요시프합니다. 이 크기를 추가하면 크기를 조정할 때 전체 양식이 매우 깜박 거리는 것처럼 보입니다. – Ian

+0

패널에만 추가해야합니다. – ThePower