Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать так чтобы рисунки не пропадали? 
:(
    Опции темы
slavaentp
Дата 12.11.2009, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



Как сделать так, чтобы рисунки не пропадали после сворачивания окна или наложения другого и т.д.?

Наверное типовый частовстречающийся вопрос, но не нашёл в туториалах как нормально его решить.

Рисую так:

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics gr = e.Graphics;
            Pen penThin = new Pen(Color.Black, 1);
            gr.DrawLine(penThin, 10,10,10,10);
}

Это сообщение отредактировал(а) slavaentp - 12.11.2009, 23:44
PM MAIL   Вверх
KuMa1104
Дата 13.11.2009, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



надо вызывать Invalidate() для обекта на котором рисуеш.

Добавлено @ 00:08
Например сделай событие для сворачивания формы и в нем Invalidate()
Тогда у тебя каждый раз после сворачивания окна будет происходит перересовка формы

Это сообщение отредактировал(а) KuMa1104 - 13.11.2009, 00:09


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
slavaentp
Дата 13.11.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



Цитата(KuMa1104 @ 13.11.2009,  00:06)
надо вызывать Invalidate() для обнкта на котором рисуеш.

Я рисую просто на форме. Куда писать Invalidate() ?
PM MAIL   Вверх
KuMa1104
Дата 13.11.2009, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



slavaentp Invalidate()  заставляет перерисовывать форму, вызываеться твой
 
Код

 protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics gr = e.Graphics;
            Pen penThin = new Pen(Color.Black, 1);
            gr.DrawLine(penThin, 10,10,10,10);
}


к примеру для события Resize твоей формы.
Тогда у тебя каждыи раз будет перерисовываться))


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
slavaentp
Дата 13.11.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



И какие события надо обработать, чтобы не исчезало?

Код
        
private void Form1_Resize(object sender, EventArgs e)
        {
            this.Invalidate();
        }

Исчезает.
PM MAIL   Вверх
KuMa1104
Дата 13.11.2009, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



MainForm_Paint

Код

[STAThread]
        static void Main() 
        {
            Application.Run(new MainForm());
        }

        private void MainForm_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            
            Graphics g = Graphics.FromHwnd(this.Handle);

            
            // g.DrawEllipse(new Pen(Color.Green), e.X, e.Y, 10, 10);

            
            myPts.Add(new Point(e.X, e.Y));
            Invalidate();
        }

        public void MainForm_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.DrawString("Hello GDI+", new Font("Times New Roman", 20), 
                new SolidBrush(Color.Black), 0, 0);

            foreach (Point p in myPts)
                g.DrawEllipse(new Pen(Color.Green), p.X, p.Y, 10, 10);
        }



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
slavaentp
Дата 13.11.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



smile)) Троелсен у меня тоже есть. Но рисунок у меня большой. Линию я это для краткости. Мой рисунок состоит из линий и кружков.

Плюс обрабатывать событие Paint я тоже пробовал. Всё исчезаетsmile
PM MAIL   Вверх
KuMa1104
Дата 13.11.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



Цитата(slavaentp @  13.11.2009,  00:27 Найти цитируемый пост)
)) Троелсен у меня тоже есть. Но рисунок у меня большой. Линию я это для краткости. Мой рисунок состоит из линий и кружков.

Аха ха.. 
В точку))))

Если рисунок реально большой то лучше рисовать на отдельном контроле и использовать двойную беферизацию, так реально быстрей будет.

Я только что твой код проверил у меня ничего не ищезло)))




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
slavaentp
Дата 13.11.2009, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



Да, обработка Paint работает. Но проблема в другом - у меня рисунок интерактивный. При нажатии на клавиши он изменяется. И рисуется через переменные на уровне класса. Поэтому при перерисовке он белиберду делает, т.к. значения переменных уровня класса изменилось к тому времени. 

Как это решать?
PM MAIL   Вверх
KuMa1104
Дата 13.11.2009, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



Белеберда какаято.
Цитата(slavaentp @  13.11.2009,  00:42 Найти цитируемый пост)
 рисуется через переменные на уровне класса. Поэтому при перерисовке он белиберду делает, т.к. значения переменных уровня класса изменилось к тому времени. 
 

Можно конкретнее к smile 


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1023 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.