다음을 통해 공유


Control.OnPaint 메서드

Paint 이벤트를 발생시킵니다.

네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)

구문

‘선언
Protected Overridable Sub OnPaint ( _
    e As PaintEventArgs _
)
‘사용 방법
Dim e As PaintEventArgs

Me.OnPaint(e)
protected virtual void OnPaint (
    PaintEventArgs e
)
protected:
virtual void OnPaint (
    PaintEventArgs^ e
)
protected void OnPaint (
    PaintEventArgs e
)
protected function OnPaint (
    e : PaintEventArgs
)

매개 변수

설명

이벤트를 발생시키면 대리자를 통해 이벤트 처리기가 호출됩니다. 자세한 내용은 이벤트 발생시키기를 참조하십시오.

또한 OnPaint 메서드를 사용하면 파생 클래스가 대리자를 연결하지 않고도 이벤트를 처리할 수 있습니다. 이는 파생 클래스에서 이벤트를 처리하는 기본 방법입니다.

상속자 참고 사항 파생 클래스에서 OnPaint을 재정의하는 경우 등록된 대리자가 이벤트를 받도록 기본 클래스의 OnPaint 메서드를 호출해야 합니다.

예제

다음 코드 예제에서는 사용자가 폼에 이미지나 이미지 파일을 끌어 놓을 수 있고, 해당 이미지가 끌어 놓은 지점에 표시되도록 합니다. OnPaint 메서드는 폼을 그릴 때마다 이미지를 다시 그리기 위해 재정의됩니다. 그렇지 않으면 다음에 다시 그릴 때까지 이미지가 그대로 지속됩니다. DragEnter 이벤트 처리 메서드는 폼으로 끌어 온 데이터 형식을 확인하여 적절한 피드백을 제공합니다. 데이터에서 Image를 만들 수 있을 경우 DragDrop 이벤트 처리 메서드는 폼에 이미지를 표시합니다. DragEventArgs.XDragEventArgs.Y 값이 화면 좌표이므로 예제에서는 PointToClient 메서드를 사용하여 이를 클라이언트 좌표로 변환합니다.

Private picture As Image
Private pictureLocation As Point

Public Sub New()
   ' Enable drag-and-drop operations.
   Me.AllowDrop = True
End Sub

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
   MyBase.OnPaint(e)

   ' If there is an image and it has a location, 
   ' paint it when the Form is repainted.
   If Not (Me.picture Is Nothing) And _
     Not (Me.pictureLocation.Equals(Point.Empty)) Then
      e.Graphics.DrawImage(Me.picture, Me.pictureLocation)
   End If
End Sub

Private Sub Form1_DragDrop(ByVal sender As Object, _
  ByVal e As DragEventArgs) Handles MyBase.DragDrop
   ' Handle FileDrop data.
   If e.Data.GetDataPresent(DataFormats.FileDrop) Then
      ' Assign the file names to a string array, in 
      ' case the user has selected multiple files.
      Dim files As String() = CType(e.Data.GetData(DataFormats.FileDrop), String())
      Try
         ' Assign the first image to the 'picture' variable.
         Me.picture = Image.FromFile(files(0))
         ' Set the picture location equal to the drop point.
         Me.pictureLocation = Me.PointToClient(New Point(e.X, e.Y))
      Catch ex As Exception
         MessageBox.Show(ex.Message)
         Return
      End Try
   End If

   ' Handle Bitmap data.
   If e.Data.GetDataPresent(DataFormats.Bitmap) Then
      Try
         ' Create an Image and assign it to the picture variable.
         Me.picture = CType(e.Data.GetData(DataFormats.Bitmap), Image)
         ' Set the picture location equal to the drop point.
         Me.pictureLocation = Me.PointToClient(New Point(e.X, e.Y))
      Catch ex As Exception
         MessageBox.Show(ex.Message)
         Return
      End Try
   End If

   ' Force the form to be redrawn with the image.
   Me.Invalidate()
End Sub

Private Sub Form1_DragEnter(ByVal sender As Object, _
  ByVal e As DragEventArgs) Handles MyBase.DragEnter
   ' If the data is a file or a bitmap, display the copy cursor.
   If e.Data.GetDataPresent(DataFormats.Bitmap) _
      Or e.Data.GetDataPresent(DataFormats.FileDrop) Then
      e.Effect = DragDropEffects.Copy
   Else
      e.Effect = DragDropEffects.None
   End If
End Sub
private Image picture;
private Point pictureLocation;

public Form1()
{
   // Enable drag-and-drop operations and 
   // add handlers for DragEnter and DragDrop.
   this.AllowDrop = true;
   this.DragDrop += new DragEventHandler(this.Form1_DragDrop);
   this.DragEnter += new DragEventHandler(this.Form1_DragEnter);
}

protected override void OnPaint(PaintEventArgs e)
{
   // If there is an image and it has a location, 
   // paint it when the Form is repainted.
   base.OnPaint(e);
   if(this.picture != null && this.pictureLocation != Point.Empty)
   {
      e.Graphics.DrawImage(this.picture, this.pictureLocation);
   }
}

private void Form1_DragDrop(object sender, DragEventArgs e)
{
   // Handle FileDrop data.
   if(e.Data.GetDataPresent(DataFormats.FileDrop) )
   {
      // Assign the file names to a string array, in 
      // case the user has selected multiple files.
      string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
      try
      {
         // Assign the first image to the picture variable.
         this.picture = Image.FromFile(files[0]);
         // Set the picture location equal to the drop point.
         this.pictureLocation = this.PointToClient(new Point(e.X, e.Y) );
      }
      catch(Exception ex)
      {
         MessageBox.Show(ex.Message);
         return;
      }
   }

   // Handle Bitmap data.
   if(e.Data.GetDataPresent(DataFormats.Bitmap) )
   {
      try
      {
         // Create an Image and assign it to the picture variable.
         this.picture = (Image)e.Data.GetData(DataFormats.Bitmap);
         // Set the picture location equal to the drop point.
         this.pictureLocation = this.PointToClient(new Point(e.X, e.Y) );
      }
      catch(Exception ex)
      {
         MessageBox.Show(ex.Message);
         return;
      }
   }
   // Force the form to be redrawn with the image.
   this.Invalidate();
}

private void Form1_DragEnter(object sender, DragEventArgs e)
{
   // If the data is a file or a bitmap, display the copy cursor.
   if (e.Data.GetDataPresent(DataFormats.Bitmap) || 
      e.Data.GetDataPresent(DataFormats.FileDrop) ) 
   {
      e.Effect = DragDropEffects.Copy;
   }
   else
   {
      e.Effect = DragDropEffects.None;
   }
}
private:
   Image^ picture;
   Point pictureLocation;

public:
   Form1()
   {
      
      // Enable drag-and-drop operations and
      // add handlers for DragEnter and DragDrop.
      this->AllowDrop = true;
      this->DragDrop += gcnew DragEventHandler( this, &Form1::Form1_DragDrop );
      this->DragEnter += gcnew DragEventHandler( this, &Form1::Form1_DragEnter );
   }

protected:
   virtual void OnPaint( PaintEventArgs^ e ) override
   {
      
      // If there is an image and it has a location,
      // paint it when the Form is repainted.
      Form::OnPaint( e );
      if ( this->picture != nullptr && this->pictureLocation != Point::Empty )
      {
         e->Graphics->DrawImage( this->picture, this->pictureLocation );
      }
   }

private:
   void Form1_DragDrop( Object^ /*sender*/, DragEventArgs^ e )
   {
      
      // Handle FileDrop data.
      if ( e->Data->GetDataPresent( DataFormats::FileDrop ) )
      {
         // Assign the file names to a String* array, in
         // case the user has selected multiple files.
         array<String^>^files = (array<String^>^)e->Data->GetData( DataFormats::FileDrop );
         try
         {
            // Assign the first image to the picture variable.
            this->picture = Image::FromFile( files[ 0 ] );
            
            // Set the picture location equal to the drop point.
            this->pictureLocation = this->PointToClient( Point(e->X,e->Y) );
         }
         catch ( Exception^ ex ) 
         {
            MessageBox::Show( ex->Message );
            return;
         }

      }
      
      // Handle Bitmap data.
      if ( e->Data->GetDataPresent( DataFormats::Bitmap ) )
      {
         try
         {
            // Create an Image and assign it to the picture variable.
            this->picture = dynamic_cast<Image^>(e->Data->GetData( DataFormats::Bitmap ));

            // Set the picture location equal to the drop point.
            this->pictureLocation = this->PointToClient( Point(e->X,e->Y) );
         }
         catch ( Exception^ ex ) 
         {
            MessageBox::Show( ex->Message );
            return;
         }
      }
      
      // Force the form to be redrawn with the image.
      this->Invalidate();
   }

   void Form1_DragEnter( Object^ /*sender*/, DragEventArgs^ e )
   {
      // If the data is a file or a bitmap, display the copy cursor.
      if ( e->Data->GetDataPresent( DataFormats::Bitmap ) || e->Data->GetDataPresent( DataFormats::FileDrop ) )
      {
         e->Effect = DragDropEffects::Copy;
      }
      else
      {
         e->Effect = DragDropEffects::None;
      }
   }
private Image picture;
private Point pictureLocation;

public Form1()
{
    // Enable drag-and-drop operations and 
    // add handlers for DragEnter and DragDrop.
    this.set_AllowDrop(true);
    this.add_DragDrop(new DragEventHandler(this.Form1_DragDrop));
    this.add_DragEnter(new DragEventHandler(this.Form1_DragEnter));
} //Form1

protected void OnPaint(PaintEventArgs e)
{
    // If there is an image and it has a location, 
    // paint it when the Form is repainted.
    super.OnPaint(e);
    if (this.picture != null && !this.pictureLocation.Equals(Point.Empty)) {
        e.get_Graphics().DrawImage(this.picture, this.pictureLocation);
    }
} //OnPaint

private void Form1_DragDrop(Object sender, DragEventArgs e)
{
    // Handle FileDrop data.
    if (e.get_Data().GetDataPresent(DataFormats.FileDrop)) {
        // Assign the file names to a string array, in 
        // case the user has selected multiple files.
        String files[] = (String[])(e.get_Data().GetData(
            DataFormats.FileDrop));
        try {
            // Assign the first image to the picture variable.
            this.picture = Image.FromFile(files.toString());
            // Set the picture location equal to the drop point.
            this.pictureLocation = this.PointToClient(new Point(e.get_X(), 
                e.get_Y()));
        }
        catch (System.Exception ex) {
            MessageBox.Show(ex.get_Message());
            return;
        }
    }
    // Handle Bitmap data.
    if (e.get_Data().GetDataPresent(DataFormats.Bitmap)) {
        try {
            // Create an Image and assign it to the picture variable.
            this.picture = (Image)e.get_Data().GetData(DataFormats.Bitmap);
            // Set the picture location equal to the drop point.
            this.pictureLocation = this.PointToClient(new Point(e.get_X(), 
                e.get_Y()));
        }
        catch (System.Exception ex) {
            MessageBox.Show(ex.get_Message());
            return;
        }
    }
    // Force the form to be redrawn with the image.
    this.Invalidate();
} //Form1_DragDrop

private void Form1_DragEnter(Object sender, DragEventArgs e)
{
    // If the data is a file or a bitmap, display the copy cursor.
    if (e.get_Data().GetDataPresent(DataFormats.Bitmap) || e.get_Data().
        GetDataPresent(DataFormats.FileDrop)) {
        e.set_Effect(DragDropEffects.Copy);
    }
    else {
        e.set_Effect(DragDropEffects.None);
    }
} //Form1_DragEnter
' This example creates a PictureBox control on the form and draws to it. 
' This example assumes that the Form_Load event handler method is connected 
' to the Load event of the form.
Private pictureBox1 As New PictureBox()

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Dock the PictureBox to the form and set its background to white.
    pictureBox1.Dock = DockStyle.Fill
    pictureBox1.BackColor = Color.White
    ' Connect the Paint event of the PictureBox to the event handler method.
    AddHandler pictureBox1.Paint, AddressOf Me.pictureBox1_Paint

    ' Add the PictureBox control to the Form.
    Me.Controls.Add(pictureBox1)
End Sub 'Form1_Load


Private Sub pictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
    ' Create a local version of the graphics object for the PictureBox.
    Dim g As Graphics = e.Graphics

    ' Draw a string on the PictureBox.
    g.DrawString("This is a diagonal line drawn on the control", _
        New Font("Arial", 10), Brushes.Red, New PointF(30.0F, 30.0F))
    ' Draw a line in the PictureBox.
    g.DrawLine(System.Drawing.Pens.Red, pictureBox1.Left, _ 
        pictureBox1.Top, pictureBox1.Right, pictureBox1.Bottom)
End Sub 'pictureBox1_Paint
// This example creates a PictureBox control on the form and draws to it.
// This example assumes that the Form_Load event handler method is
// connected to the Load event of the form.

private PictureBox pictureBox1 = new PictureBox();
private void Form1_Load(object sender, System.EventArgs e)
{
    // Dock the PictureBox to the form and set its background to white.
    pictureBox1.Dock = DockStyle.Fill;
    pictureBox1.BackColor = Color.White;
    // Connect the Paint event of the PictureBox to the event handler method.
    pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);

    // Add the PictureBox control to the Form.
    this.Controls.Add(pictureBox1);
}

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    // Create a local version of the graphics object for the PictureBox.
    Graphics g = e.Graphics;

    // Draw a string on the PictureBox.
    g.DrawString("This is a diagonal line drawn on the control",
        new Font("Arial",10), System.Drawing.Brushes.Blue, new Point(30,30));
    // Draw a line in the PictureBox.
    g.DrawLine(System.Drawing.Pens.Red, pictureBox1.Left, pictureBox1.Top,
        pictureBox1.Right, pictureBox1.Bottom);
}
   // This example creates a PictureBox control on the form and draws to it.
   // This example assumes that the Form_Load event handler method is
   // connected to the Load event of the form.
private:
   PictureBox^ pictureBox1;
   void Form1_Load( Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      pictureBox1 = gcnew PictureBox;

      // Dock the PictureBox to the form and set its background to white.
      pictureBox1->Dock = DockStyle::Fill;
      pictureBox1->BackColor = Color::White;

      // Connect the Paint event of the PictureBox to the event handler method.
      pictureBox1->Paint += gcnew System::Windows::Forms::PaintEventHandler( this, &Form1::pictureBox1_Paint );

      // Add the PictureBox control to the Form.
      this->Controls->Add( pictureBox1 );
   }

   void pictureBox1_Paint( Object^ /*sender*/, System::Windows::Forms::PaintEventArgs^ e )
   {
      // Create a local version of the graphics object for the PictureBox.
      Graphics^ g = e->Graphics;

      // Draw a string on the PictureBox.
      g->DrawString( "This is a diagonal line drawn on the control",
         gcnew System::Drawing::Font( "Arial",10 ), System::Drawing::Brushes::Blue, Point(30,30) );

      // Draw a line in the PictureBox.
      g->DrawLine( System::Drawing::Pens::Red, pictureBox1->Left, pictureBox1->Top,
         pictureBox1->Right, pictureBox1->Bottom );
   }
// This example creates a PictureBox control on the form and draws to it.
// This example assumes that the Form_Load event handler method is
// connected to the Load event of the form.
private PictureBox pictureBox1 = new PictureBox();

private void Form1_Load(Object sender, System.EventArgs e)
{
    // Dock the PictureBox to the form and set its background to white.
    pictureBox1.set_Dock(DockStyle.Fill);
    pictureBox1.set_BackColor(Color.get_White());

    // Connect the Paint event of the PictureBox to the event handler 
    // method.
    pictureBox1.add_Paint(new System.Windows.Forms.PaintEventHandler(this.
        pictureBox1_Paint));

    // Add the PictureBox control to the Form.
    this.get_Controls().Add(pictureBox1);
} //Form1_Load

private void pictureBox1_Paint(Object sender, 
    System.Windows.Forms.PaintEventArgs e)
{
    // Create a local version of the graphics object for the PictureBox.
    Graphics g = e.get_Graphics();

    // Draw a string on the PictureBox.
    g.DrawString("This is a diagonal line drawn on the control", 
        new Font("Arial", 10), System.Drawing.Brushes.get_Blue(), 
        (PointF)new PointF(30, 30));

    // Draw a line in the PictureBox.
    g.DrawLine(System.Drawing.Pens.get_Red(), pictureBox1.get_Left(), 
        pictureBox1.get_Top(), pictureBox1.get_Right(), 
        pictureBox1.get_Bottom());
} //pictureBox1_Paint

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

Control 클래스
Control 멤버
System.Windows.Forms 네임스페이스
Paint