Простейшее рисование в C#

Цель занятия

В настоящей работе необходимо познакомиться с рисованием пером в C#. Надлежит построить график синусоиды или другой математической функции. Дополнительные сведения можно найти в [7].

Краткие теоретические сведения

Для рисования линий и фигур нужно получить сначала графический контекст. Затем выдать команды рисования. Следующий фрагмент поясняет сказанное:

Graphics g= e.Graphics; // получаем графический контекст Pen p = new Pen(Color.Bisque,5); // создаем перо для рисования

// линий

g.DrawRectangle(p,10,10,200,200); // рисуемпрямоугольник Графическому контексту передается обработчик события on- Paint(). Поэтому можно "привязаться" именно к этому обработчику. Смысл наших действий таков: поставить кнопку и закрепить за ней обработчик события onciick(). В этом пункте обработчику следует просто вызвать перерисовку формы, где и получить фигуры. Это делается так:

private void buttonl_Click(object sender, System.EventArgs e)

{

show=l;

this.Invalidate();

}

Мы намеренно используем переменную show для того, чтобы отменить рисование, когда show==0. Метод invalidate() как раз и активизирует событие onPaint (). Это обстоятельство полезно запомнить.

Собственные обработчики событий закрепляются за событиями в конструкторе:

this.button2.Click += new

System.EventHandler(this.button2_Click);

Эта команда закрепляет программу button2_ciick за событием нажатия кнопки.

this.Paint+=new

System.Windows.Forms.PaintEventHandler(this.showgraph);

Приведенная команда аналогичным образом закрепляет программу в качестве обработчика события onPaint ().

Результатом работы описываемого приложения является следующая форма после нажатия на кнопку Pamtmg (рис. 4.4).

Рис. 4.4. Простейшее рисование на форме

Полный текст приложения приведен в листинге 4.6.

Листинг 4.6. Приложение для рисования на форме

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace painting

/// <summary>

/// Summary description for Forml.

/// </summa ry>

public class Forml : System.Windows.Forms.Form private System.Windows.Forms.Button buttonl;

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;

private System.Windows.Forms.Button button2;

private short show = 0; // Значение show = 0 запрещает

// рисование

public Forml()

{

//

// Required for Windows Form Designer support //

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent // call //

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose ();

}

}

base.Dispose( disposing );

}

#region Windows Form Designer generated code /// <summary>

/// Required method for Designer support – do not modify /// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent() // Стандартная программа // инициализации формы позволяет вставить свои собственные // команды {

this.buttonl = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.SuspendLayout();

//

// buttonl //

this.buttonl.BackColor = System.Drawing.Color.FromArgb((

(System.Byte) (255)),    ((System.Byte) (192)),

((System.Byte)(192)));

this.buttonl.Location = new System.Drawing.Point(112, 272); this.buttonl.Name = "buttonl";

this.buttonl.Size = new System.Drawing.Size(64, 24); this.buttonl.TabIndex = 0; this.buttonl.Text = "Painting";

this.buttonl.Click += new

System.EventHandler(this.buttonl_Click);

//

// button2 //

this.button2.Location = new System.Drawing.Point(216, 272); this.button2.Name = "button2";

this.button2.Size = new System.Drawing.Size(64, 24); this.button2.TabIndex = 1; this.button2.Text = "Cls";

this.button2.Click += new

System.EventHandler(this.button2_Click);

//

// Forml //

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.BackColor =

System.Drawing.Color.FromArgb(((System.Byte) (192)),

((System.Byte) (192)),   ((System.Byte) (255)));

this.ClientSize = new System.Drawing.Size(4 00, 333);

this.Controls.Add(this.button2);

this.Controls.Add(this.buttonl);

this.Name = "Forml";

this.Text = "Forml";

this.Paint += new

System.Windows.Forms.PaintEventHandler(this.showgraph);

// Закрепление события OnPaint() за обработчиком // с названием showgraph this.ResumeLayout(false) ;

}

#endregion /// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread] static void Main()

{

Application.Run(new Forml());

}

private void showgraph(object sender,

System.Windows.Forms.PaintEventArgs e)

if (show==l)

{ // Рисование, когда show=l

Graphics g= e.Graphics; // Формируем графический контекст

Pen p = new Pen(Color.Bisque,5); // Создаем перо для

// рисования

g.DrawRectangle(p,10,10,200,200); // Рисуем прямоугольник Pen p2= new Pen(Color.Beige,1);

g.DrawLine(p2,25,35,100,160); // Вторым пером рисуем

// линию

show=0;

}

}

private void buttonl_Click(object sender,

System.EventArgs e)

{

show=l;

this.Invalidate(); // Активизируем событие OnPaint()

}

private void button2_Click(object sender,

System.EventArgs e)

{

show=0;

this.Invalidate() ;

}

}

}

Другой способ использования графического контекста состоит в его прямом создании следующим образом:

Graphics g = control.CreateGraphics();

Здесь в качестве controi может выступать форма.

Итак, резюмируем сведения по простейшему рисованию.

Для рисования следует использовать графический контекст; графический контекст передается в метод, закрепленный за событием onPaint (), но можно создать графический контекст, как было показано ранее.

Класс Graphics содержит методы для рисования прямоугольников и линий (и др.):

g.DrawRectangle(p,10,10,200,200); //рисуем прямоугольник

Pen p2= new Pen (Color.Beige,1);

g.DrawLine(p2,25,35,100,160);//вторым пером рисуем линию show=0;

Для активизации события onPaint() следует использовать команду invalidate о . Эта команда заодно очищает форму от нарисованных фигур.

Задание

1.             Напишите программу для рисования синусоиды.

2.             Напишите программу для рисования гистограммы.

3.             Напишите программу для рисования многоугольника.

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100