Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2013, 18:58   #1
803
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 89
По умолчанию Рисование в Windows Form C#

Здравствуйте. Пытаюсь рисовать в формах но ничего не получается. Пытаюсь нарисовать эллипсы. Вот код
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int cx, cy;
        Graphics graph;
        Brush brush;
        Color color;
        Random rnd;
 
        void MyInit()
        {
            cx = ClientSize.Width;
            cy = ClientSize.Height;
            graph = CreateGraphics();
            rnd = new Random();
        }
        void DrawShapes()
        {
            for (int i = 0; i < 3; i++)
            {
                int numcolor = rnd.Next(3);
                switch (numcolor)
                {
                    case 0:
                        color = Color.Blue; break;
                    case 1:
                        color = Color.Yellow; break;
                    case 2:
                        color = Color.Red; break;
                }
                Point top = new Point(rnd.Next(cx), rnd.Next(cy));
                Size sz = new Size(rnd.Next(cx - top.X), rnd.Next(cy - top.Y));
                Rectangle rct = new Rectangle(top, sz);
                Point bottom = top + sz;
                brush = new LinearGradientBrush(top, bottom, Color.White, color);
                graph.FillEllipse(brush, rct);
            }
        }
        public Form1()
        {
            InitializeComponent();
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            DrawShapes();
            MyInit();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
    }
}
Вот какая ошибка. Заранее спасибо
Изображения
Тип файла: jpg Безымянный.jpg (84.1 Кб, 152 просмотров)
803 вне форума Ответить с цитированием
Старый 27.02.2013, 20:11   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Myinit перекинуть в конструктор ( возле initializecomponent) .
Как компилится не понимаю - метод обработчик онпейнта должен быть примерно таким
Код:
public void Form1_Paint(object sender, PaintEventArgs e)
т.е. не оверрайд, и сендер должен быть. Обработчик привязан к событию Onpaint формы ? Нажать F4 зайти в события (желтая молния) и поглядеть, при необходимости добавить.
phomm вне форума Ответить с цитированием
Старый 27.02.2013, 20:52   #3
803
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 89
По умолчанию

Спасибо за ответ. Ошибки больше нет, но почему то ничего не рисует, форма пустая. Myinit перенес.

Последний раз редактировалось 803; 27.02.2013 в 20:55.
803 вне форума Ответить с цитированием
Старый 27.02.2013, 21:05   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию ЧЯДНТ?

Обработчик то привязывали (в Вашей Form1.Designer.cs должна быть строка вида this.Paint += new System.Windows.Forms.PaintEventHand ler(this.Form1_Paint); ) ? Код откуда взяли ?
Вложения
Тип файла: zip WindowsFormsApplication1.zip (37.7 Кб, 37 просмотров)

Последний раз редактировалось phomm; 27.02.2013 в 21:08.
phomm вне форума Ответить с цитированием
Старый 27.02.2013, 21:13   #5
803
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 89
По умолчанию

Спасибо. Код с учебника
803 вне форума Ответить с цитированием
Старый 27.02.2013, 21:19   #6
803
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 89
По умолчанию

И последний вопрос. Тут когда форму растягиваешь рисуются круги, а как сделать чтобы они сами рисовались всё время.
803 вне форума Ответить с цитированием
Старый 27.02.2013, 22:17   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Что значит сами ? Пока не трогается форма ? Тогда просто таймер и его событие просто будет вызывать перерисовку.
phomm вне форума Ответить с цитированием
Старый 27.02.2013, 22:57   #8
803
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 89
По умолчанию

Да. Как вызвать перерисовку. rnd = ...
803 вне форума Ответить с цитированием
Старый 28.02.2013, 08:50   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
 void DrawShapes()
У Вас вызывает перерисовку. Книжечки то почитайте. В итоге что-то такое будет
Код:
 void Ontimer (...)
{
    DrawShapes();
}

Последний раз редактировалось phomm; 28.02.2013 в 08:52.
phomm вне форума Ответить с цитированием
Старый 01.03.2013, 16:22   #10
803
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 89
По умолчанию

Помогите пожалуйста. Пытаюсь рисовать на панели с таймером почему то выдает похожую ошибку что была раньше. Заранее спасибо.
Код:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int cx, cy;
        Graphics graph;
        Brush brush;
        Color color;
        Random rnd;

        void MyInit()
        {
            int cx = panel1.Width;
            int cy = panel1.Height;
            cx = ClientSize.Width;
            cy = ClientSize.Height;
            graph = CreateGraphics();
            rnd = new Random();
        }
        void DrawShapes()
        {
            for (int i = 0; i < 3; i++)
            {
                int numcolor = rnd.Next(3);
                switch (numcolor)
                {
                    case 0:
                        color = Color.Blue; break;
                    case 1:
                        color = Color.Yellow; break;
                    case 2:
                        color = Color.Red; break;
                }
                Point top = new Point(rnd.Next(cx), rnd.Next(cy));
                Size sz = new Size(rnd.Next(cx - top.X), rnd.Next(cy - top.Y));
                Rectangle rct = new Rectangle(top, sz);
                Point bottom = top + sz;
                brush = new LinearGradientBrush(top, bottom, Color.White, color);
                graph.FillEllipse(brush, rct);
            }
        }
        public Form1()
        {
            InitializeComponent();
            MyInit();
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            if (timer1.Enabled)
            {
                graph = panel1.CreateGraphics();
                DrawShapes();
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (timer1.Enabled)
            {
                this.Invalidate(false);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

        public void Form1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void Form1_Load_1(object sender, EventArgs e)
        {

        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }
        }
    }
Изображения
Тип файла: jpg caf1c24477aadd7961c7c4b802ce9585.jpg (71.6 Кб, 125 просмотров)
803 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование на picturebox, общие вопросы (c++ clr, windows form app) casekey Помощь студентам 0 22.04.2012 21:37
Рисование Windows form aplication и движение maksimla Windows Forms 0 18.04.2011 15:40
Можно ли подключить к web form windows form? Manonia Windows Forms 0 20.10.2010 05:28
C# Windows Form rvn Фриланс 4 26.01.2010 04:23
рисование астроиды (VC++ windows form aplication) vo_sa Общие вопросы C/C++ 1 23.11.2009 00:48