2011-11-07 5 views
2

질문 : 어떻게 폼이 아닌 Panel에 사각형을 그립니다. 사용 (그래픽 g = this.panel1.CreateGraphics()) {}Panel C# Form에 직사각형을 그립니다.

: 나는 이런 식으로 뭔가를 할 필요가 있으리라 믿고있어

/* 
    * based on a some flags i determine which shape i want to draw. 
    * All shapes are stored in a list. I loop through the list 
    * and call each shape specific draw method - as shown below:. 
    * 
    */ 
namespace myDrawProgram 
{ 
    private void panelArea_Paint(object sender, PaintEventArgs e) 
     { 
      if (drawWithPaint == true) 
      { 
       Pen p = new Pen(Color.Blue); 
       p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; 

       if (IsShapeRectangle == true) 
       { 
        e.Graphics.DrawRectangle(p, rect); 
       } 
       else if (IsShapeCircle == true) 
       { 
        e.Graphics.DrawEllipse(p, rect); 
       } 

      } 
      foreach (Shapes shape in listOfShapes) 
      { 

       shape.Draw(e.Graphics); 
      } 
     } 
} 

/* 
* In another file i have my class which deals with 
* drawing rectangles. It is as follows: 
* 
*/ 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Drawing; 
using SETPaint; 

namespace myDrawProgram 
{ 
    class TheRectangles : Shapes 
    { 
     public Rectangle MyRect { set; get; } 

     public TheRectangles(Rectangle rect, Color colour, Color boarderColour, Int32 brushThickness) 
      : base(colour, boarderColour, brushThickness) 
     { 
      MyRect = rect; 

     } 


     public override void Draw(Graphics g) 
     { 
      base.Draw(g); 


      g.FillRectangle(new SolidBrush(Shapes.c), MyRect); 
      g.DrawRectangle(new Pen(bc, MyBrushThickness), MyRect); 
     } 
    } 
} 

: 여기처럼 내 코드는 모습입니다 난 내 코드에 관해서는 이것을 구현하는 방법을 모르겠다. ...

+0

그림 논리를 패널 클래스에 넣고 양식에 넣지 않으시겠습니까? 그것이 그렇듯, 당신의 질문은 나에게 의미가 없습니다. –

+0

사각형에 그려지는 양식을 원하지 않습니다. 패널에 표시하고 싶습니다. 현재 패널에 그릴 때 아무 것도 나타나지 않습니다. 이해가 되니? 희망이 너무 .. – BigBug

+0

당신이 쳐다 보 : [http://stackoverflow.com/questions/282838/drawing-on-top-of-controls-inside-a-panel-c-winforms](http://stackoverflow .com/questions/282838/drawing-on-controls-inside-a-panel-c-winforms) – Udomaki

답변

4

참조 : panelArea이의 이름

panelArea.Paint += new PaintEventHandler(panelArea_Paint); 

경우 귀하 양식을 작성한 다음 패널로 변경하십시오.

panel1.Paint += new PaintEventHandler(panel1_Paint); 

n 그림 논리를 해당 방법으로 이동하십시오.

private void panel1_Paint(object sender, PaintEventArgs e) { 
    // the rest of your drawing 
} 
+0

감사합니다. 지금은 이해 – BigBug

1

부모 (폼?)는 각각의 컨트롤을 그리는 것처럼 보인다.

나는 그렇게하지 않을 것이다.

셰이프를 그리는 컨트롤이 필요하고 (패널의 다른 동작을 반드시 필요로하지는 않음) 필요한 셰이프가 무엇인지 나타내는 속성을 가진 사용자 컨트롤을 만들고 그 자체의 책임을지게 만듭니다 표현.

패널의 동작이 필요한 경우 Panel을 서브 클래스 화하고 서브 클래 싱 된 컨트롤에서 그리기 동작을 구현할 수 있습니다. 다시 말하지만, 컨트롤을 통해 자체 렌더링이 수행됩니다. 사용자 그려 컨트롤에 대한 정보를 들어

는 패널의 페인트 이벤트 엮은하지 않은 것 소리

http://msdn.microsoft.com/en-us/library/b818z6z6(v=vs.71).aspx

관련 문제