Control.OnPaint メソッド
Paint イベントを発生させます。
Protected Overridable Sub OnPaint( _
ByVal e As PaintEventArgs _)
[C#]
protected virtual void OnPaint(PaintEventArgse);
[C++]
protected: virtual void OnPaint(PaintEventArgs* e);
[JScript]
protected function OnPaint(
e : PaintEventArgs);
パラメータ
- e
イベント データを格納している PaintEventArgs 。
解説
イベントが発生すると、デリゲートを使用してイベント ハンドラが呼び出されます。詳細については、「 イベントの発生 」を参照してください。
OnPaint メソッドを使用すると、デリゲートを結び付けずに、派生クラスでイベントを処理することもできます。派生クラスでイベントを処理する場合は、この手法をお勧めします。
継承時の注意: 派生クラスで OnPaint をオーバーライドする場合は、登録されているデリゲートがイベントを受け取ることができるように、基本クラスの OnPaint メソッドを呼び出してください。
使用例
[Visual Basic, C#, C++] ユーザーがイメージまたはイメージ ファイルをフォームにドラッグできるようにし、ドロップされた場所にそのイメージを表示する例を次に示します。 OnPaint メソッドは、フォームが描画されるたびにイメージを再描画するためオーバーライドされます。されない場合、イメージは次回の再描画までそのままの状態で残ります。 DragEnter イベント処理メソッドでは、フォームにドラッグされているデータの種類を判別し、適切なフィードバックを提供します。 DragDrop イベント処理メソッドでは、 Image をデータから作成できる場合に、フォーム上にイメージを表示します。 DragEventArgs.X および DragEventArgs.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
[C#]
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;
}
}
[C++]
private:
Image* picture;
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::Form1_DragDrop);
this->DragEnter += new DragEventHandler(this, &Form1::Form1_DragEnter);
}
protected:
void OnPaint(PaintEventArgs* e) {
// If there is an image and it has a location,
// paint it when the Form is repainted.
Form::OnPaint(e);
if (this->picture != 0 && 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( 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;
}
}
[Visual Basic]
' This example creates a PictureBox control on the form and draws to it.
' This example assumes that the Form_Load event handling 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 handling 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
[C#]
// This example creates a PictureBox control on the form and draws to it.
// This example assumes that the Form_Load event handling 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 handling 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);
}
[C++]
// This example creates a PictureBox control on the form and draws to it.
// This example assumes that the Form_Load event handling method is
// connected to the Load event of the form.
private:
PictureBox* pictureBox1;
void Form1_Load(Object* /*sender*/, System::EventArgs* /*e*/)
{
pictureBox1 = new 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 handling method.
pictureBox1->Paint += new 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(S"This is a diagonal line drawn on the control",
new System::Drawing::Font(S"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);
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
参照
Control クラス | Control メンバ | System.Windows.Forms 名前空間 | Paint