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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2011, 14:14   #1
zakaev
 
Регистрация: 08.12.2010
Сообщений: 8
Вопрос очистка pictureBox C# Microsoft Visual Studio

Друзья, по нажатию на кнопку я рисую линии по след.алгоритму

Код:
private void button1_Click(object sender, EventArgs e)
       {            
           Graphics g = pictureBox1.CreateGraphics();
           Pen myPen = new Pen(Color.Black);
           Pen myPen2 = new Pen(Color.Red);
           Font drawFont = new Font("Arial", 16);
           SolidBrush br = new SolidBrush(Color.Red);
           Random a = new Random();
           int count = a.Next(2,5);
           int len=719/count;                        
           Point[] apt = new Point[count+1];

           apt[0] = new Point(10, 75);
           g.FillEllipse(br, 6, 71, 8, 8);            
           for (int i = 1; i < count + 1; i++)
           {
               apt[i] = new Point(10 + i * len, 75);                
               g.DrawString(a.Next(10000000, 99999999).ToString(), drawFont, br, (float)(10 + (i - 1) * len), (float)95);
               g.FillEllipse(br, 6 + i * len, 71, 8, 8);                
           }
           g.DrawLines(myPen, apt);
           myPen.Dispose();
           myPen2.Dispose();
           br.Dispose();
           g.Dispose();
       }
Если вызывать событие несколько раз, изображения соответственно наслаиваются друг на друга.

Я могу очистить picturebox по нажатию на другую кнопку так:
Код:
       private void button2_Click(object sender, EventArgs e)
       {
           pictureBox1.Image = null;
           pictureBox1.Invalidate();            
       }
Хочу обойтись без второй кнопки. Чтобы по нажатию на одну первую кнопку изображение если оно нарисовано, предварительно стиралось и прорисовывалось новое. Но если я добавлю строки удаления перед прорисовкой, то получается откровенная туфта. Посоветуете что?


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 26.03.2011 в 14:34.
zakaev вне форума Ответить с цитированием
Старый 26.03.2011, 18:33   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Вызывай этот метод перед каждой отрисовкой
Hollander вне форума Ответить с цитированием
Старый 04.09.2011, 17:01   #3
krawa90
Новичок
Джуниор
 
Регистрация: 18.02.2011
Сообщений: 1
По умолчанию

После
Цитата:
Graphics g = pictureBox1.CreateGraphics();
ставь
Код:
g.Clear(Color.White);
krawa90 вне форума Ответить с цитированием
Старый 21.03.2012, 02:21   #4
frozen123123
 
Регистрация: 21.03.2012
Сообщений: 3
По умолчанию

Добрый день!

Что бы не создавать новую тему спрошу здесь:

Рисую прямоугольник: событие MouseDown "запоминает" первую вершину прямоугольника, глобальная булева переменная дает добро на рисование, событие MouseMove определяет вторую вершину. Идея такая: при движении мыши перерисовывается прямоугольник, событие MouseUp прекращает рисование. в результате при шевелении мышкой мы видим прямоугольник, который получится при отпускании кнопки. То есть по сути тоже самое что и инструмент SelectedTool в графических редакторах.

Код:
 private void drawRectangle(int width, int height)
        {
            Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
            Pen pen = new Pen(Color.Red, 1);
            g.Clear(Color.White);
        
            if ((p1.X < p2.X)&&(p1.Y<p2.Y))
            {
                g.DrawRectangle(pen, p1.X, p1.Y, width, height);
            }
            
            if ((p1.X > p2.X) && (p1.Y > p2.Y))
            {
                g.DrawRectangle(pen, p2.X, p2.Y, width, height);
            }

            if ((p1.X < p2.X) && (p1.Y > p2.Y))
            {
                g.DrawRectangle(pen, p1.X, p2.Y, width, height);
            }

            if ((p1.X > p2.X) && (p1.Y < p2.Y))
            {
                g.DrawRectangle(pen, p2.X, p1.Y, width, height);
            }
       
        //    g.Dispose();
        }
Все работает хорошо, но в этом случае можно нарисовать только 1 прямоугольник, при рисовании второго, стирается первый из-за метода g.Clear(Color.White).

Каким образом можно нарисовать второй прямоугольник подобным способом, что бы не удалился первый?
frozen123123 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Microsoft Visual Studio 2008 Lestad Софт 1 14.11.2010 16:35
Microsoft Visual Studio C++ 2008 +Sergey+ Visual C++ 3 28.02.2009 22:08
Visual J# from Microsoft Visual Studio .NET Flash_ Общие вопросы по Java, Java SE, Kotlin 2 28.12.2006 10:16