Открылся форум посвещеный программированию, где можно обсуждать и задавать любые вопросы по C++, C#, Visual Basic, Windows Forms

Форум

4. Рисование примитивов, поворот текста на любой угол, изменение

точки начала координат, выбор цвета

 

     Создадим новый проект, и добавим несколько элементов управления как показано на рисунке:

 


 

            После добавления полосы прокрутки, нужно поменять её свойства: Maximum – 360, и TickFrequency – 15. Теперь назначим несколько переменных, которые нам пригодятся:

 

        int f1 = 0, f2 = 0, s = 0, f3 = 0;

        Pen myPen = new Pen(Color.Black, 3);

        Brush Br = new SolidBrush(Color.Black);

        Point[] ppp = { new Point(1, 1), new Point(50, 1), new Point(1, 50) };

 

            Для рисования на холсте линий мы создаем карандаш: Pen myPen = new Pen(Color.Black, 3), а для рисования Текста и сплошных фигур – кисть: Brush Br = new SolidBrush(Color.Black). Кроме того для некоторых функций рисования, создается массив точек: Point[] ppp = { new Point(1, 1), new Point(50, 1), new Point(1, 50) }. Теперь напишем код для всех кнопок расположенных на форме, в том числе, для полосы прокрутки - trackBar1_Scroll:

 

        private void button1_Click(object sender, EventArgs e)

        {

            s = 1;  f1 += 1;  Invalidate();

            if (f1 == 6)  { f1 = 1; }

         }

 

        private void button2_Click(object sender, EventArgs e)

        {

            s = 2; f2 += 1;  Invalidate();

            if (f2 == 5)   { f2 = 1; }

        }

 

        private void button4_Click(object sender, EventArgs e)

        {

            f3 = 1;

        }

 

        private void trackBar1_Scroll(object sender, EventArgs e)

        {

            Invalidate();

        }

 

        private void button3_Click(object sender, EventArgs e)

        {

            ColorDialog col = new ColorDialog();

            if (col.ShowDialog() == DialogResult.OK)

            {

                textBox1.Text = col.Color.Name;

                myPen = new Pen(col.Color, 5);

                Br = new SolidBrush(col.Color);

            }

        }

            В нашем коде почти везде встречается оператор Invalidate. Этот оператор заставляет Windows  перерисовывать окно. Когда при выполнении программы пользователь нажимает кнопку «Выбор цвета», появляется диалог, который возвращает выбранный цвет: col.Color.Name. Для нашего карандаша и кисти мы присваиваем выбранное значение. При назначении цвета карандаша указывается необязательный параметр – толщина линии, в нашем случае – 5. Теперь осталось только реализовать функцию прорисовки. Для этого на вкладке Properties выберем нашу форму: Form1, и нажмем вкладку Events. Появятся различные события для формы, из которых выберем: Paint. В нашем коде появится обработка этого события.

 


 

            Напишем такой код:

 

            Rectangle fillRect = new Rectangle(1, 1, 100, 100);

            Region fillRegion = new Region(fillRect);

            if (f3 == 1) { e.Graphics.TranslateTransform(this.Width / 2, this.Height / 2); }

            e.Graphics.RotateTransform(trackBar1.Value);

            if (s == 1)

            {

                switch (f1)

                {

                    case 1:

                        e.Graphics.DrawLine(myPen, 1, 1, 50, 50);

                        break;

                    case 2:

                        e.Graphics.DrawRectangle(new Pen(Color.FromArgb(120, 120, 0, 255)), 1, 1, 50, 50);

                        break;

                    case 3:

                        e.Graphics.DrawEllipse(myPen, 1, 1, 50, 50);

                        break;

                    case 4:

                        e.Graphics.DrawString("Текст", new Font("Arial", 30), Br, 1, 1);

                        break;

                    case 5:

                        e.Graphics.DrawPolygon(myPen, ppp);

                        break;

                }

            }

            if (s == 2)

            {

                switch (f2)

                {

                    case 1:

                        e.Graphics.FillEllipse(Br, 1, 1, 100, 50);

                        break;

                    case 2:

                        e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(120, 120, 0, 255)), 1, 1, 50, 50);

                        break;

                    case 3:

                        e.Graphics.FillRegion(Br, fillRegion);

                        break;

                    case 4:

                        e.Graphics.FillPolygon(Br, ppp);

                        break;

                    default:

                        e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(120, 120, 120, 120)), 1, 1, 50, 50);

                        break;

                }

            }

  }

 

            В этом коде активно используется функция switch case. Эта функция в зависимости от значения переменной в скобках переходит по одному из предложенных вариантов или, если ни один из вариантов не проходит, выполняет условие: default. Функция e.Graphics. TranslateTransform(this.Width / 2, this.Height / 2) Назначает новый центр координат, равный половине размера формы: (this.Width / 2, this.Height / 2), а функция:            e.Graphics. RotateTransform(trackBar1.Value); поворачивает холст на угол, величину которого определяет полоса прокрутки: trackBar1.Value.  

Конструктор сайтов - uCoz