Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/23: Рейтинг темы: голосов - 23, средняя оценка - 4.74
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544

Отрисовка окна(C#)

21.09.2010, 22:56. Показов 4413. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! столкнулся с такой проблемой, использую код
C#
1
2
3
4
5
private void Form1_Paint(object sender, PaintEventArgs e)
        {
            for (int i = 0; i < 256;i++ )
                e.Graphics.DrawLine(new Pen(Color.FromArgb(255, 255 - i, 255 - i), i*(this.Height/256)), 0, i * (this.Height / 256), this.Width, i * (this.Height / 256));
        }
Первый раз выводит отлично, но при изменении размеров формы новые линии отрисовываются под старыми и получается довольно некрасиво. Как убрать этот эффект?
Заранее всем спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.09.2010, 22:56
Ответы с готовыми решениями:

Отрисовка окна
Привет всем. Не правильная отрисовка окна, координаты мыши остаются на окне. Как исправить? Работа сделана в VC2008 на C++. ...

MFC отрисовка окна
Привет. В MFC для MDI существует метод OnDraw для отрисовки окна. Но этот метод вызывается только при определенных событиях (свертывание,...

Скрытая отрисовка окна
В общем такая проблема, есть диалоговое окно, когда оно показывается ShowWindow(диалогвое окно,SW_SHOWNORMAL); иногда происходит...

13
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
21.09.2010, 23:20
Попробуй так:
C#
1
e.Graphics.Clear(/* Цвет */);
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
21.09.2010, 23:21  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
Попробуй так:
C#
1
e.Graphics.Clear(/* Цвет */);
Пробовал, нет эффекта(
Все равно вот так

А должно быть равномерно, т.е. старые линии должны закрашиватся. Но замечу, это только при изменении размеров формы, если свернуть и развернуть вес нормально.
0
 Аватар для Anna502
14 / 14 / 3
Регистрация: 02.07.2010
Сообщений: 99
21.09.2010, 23:33
Попробуйте
C#
1
2
3
4
5
6
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            for (int i = 0; i < 256; i++)
                e.Graphics.DrawLine(new Pen(Color.FromArgb(255, 255 - i, 255 - i), i * (this.Height / 256)), 0, i * (this.Height / 256), this.Width, i * (this.Height / 256));
            Invalidate();
        }
и поставьте doubleBuffered = true
1
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
21.09.2010, 23:36
Rockedit, ты это рисуешь с помощью линий? Используй LinearGradientBrush! Попробуй добавить this.Invalidate(); в событие Resize формы и установить DoubleBuffered в true.
Anna502, нельзя вызывать Invalidate() из Paint, будет зацикливание!
1
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
21.09.2010, 23:40  [ТС]
Цитата Сообщение от Anna502 Посмотреть сообщение
Попробуйте
C#
1
2
3
4
5
6
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            for (int i = 0; i < 256; i++)
                e.Graphics.DrawLine(new Pen(Color.FromArgb(255, 255 - i, 255 - i), i * (this.Height / 256)), 0, i * (this.Height / 256), this.Width, i * (this.Height / 256));
            Invalidate();
        }
и поставьте doubleBuffered = true
Спасибо, пробовал. Тогда анимация на форме, будет работать, только при изменении размеров формы)))
Ты это рисуешь с помощью линий? Используй LinearGradientBrush! Попробуй добавить this.Invalidate(); в событие Resize формы и установить DoubleBuffered в true.
Да, задание в инсте такое)) тупость одним словом)
Anna502, нельзя вызывать Invalidate() из Paint, будет зацикливание!
не будет, если DoubleBuffered в true

Блин, это я ступил)))) я Invalidate() не там прописал. спасибо SSTREGG, уже не первый раз помогаешь)
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
21.09.2010, 23:48
Цитата Сообщение от Rockedit Посмотреть сообщение
не будет, если DoubleBuffered в true
Будет. Проверь сам.
C#
1
2
3
4
5
6
7
8
9
        int j = 0;
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            for (int i = 0; i < 256; i++)
                e.Graphics.DrawLine(new Pen(Color.FromArgb(255, 255 - i, 255 - i), i * (this.Height / 256)), 0, i * (this.Height / 256), this.Width, i * (this.Height / 256));
            Invalidate();
 
            Debug.WriteLine(j++); // В Output будут постоянно выводится значения.
        }
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
21.09.2010, 23:51  [ТС]
LinearGradientBrush
А можно про него поподробнее, я в мсдн почитал, подключил System.Windows.Media, но класс LinearGradientBrush все равно не видится.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
21.09.2010, 23:55
Надо не медиа. Вместо
C#
1
2
for (int i = 0; i < 256; i++)
                e.Graphics.DrawLine(new Pen(Color.FromArgb(255, 255 - i, 255 - i), i * (this.Height / 256)), 0, i * (this.Height / 256), this.Width, i * (this.Height / 256));
напиши
C#
1
2
3
4
5
using System.Drawing.Drawing2D;
...
using (LinearGradientBrush lgb = new LinearGradientBrush(e.ClipRectangle, Color.White, Color.Red, LinearGradientMode.Vertical)) {
    e.Graphics.FillRectangle(lgb, e.ClipRectangle);
}
1
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
21.09.2010, 23:58  [ТС]
Теперь и фон PictureBox тоже заливает градиентом))
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
22.09.2010, 00:00
То есть? Это хорошо или плохо? )
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
22.09.2010, 00:04  [ТС]
Т.е. у меня на форме есть PictureBox, в который вставлена gif-анимация, я сделал его фон прозрачным(так надо по заданию, будь оно не ладно!), а при градиентной заливке, которая несомненно лучше, и фон PictureBox так же заливается и становится не прозрачным.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
22.09.2010, 00:07
Да, с этим багом я так и не справился... Это проявляется для всех контролов у которых BackColor = Transparent.
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
22.09.2010, 00:27  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
Да, с этим багом я так и не справился... Это проявляется для всех контролов у которых BackColor = Transparent.
Да ну и фиг с ним) все равно сдавать мне в моем варианте, самое главнгое что с отрисовкой помогли, спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2010, 00:27
Помогаю со студенческими работами здесь

Отрисовка окна и его изменение
Делаю приложения для себя для изучения английских слов, программа выбирает из словаря слово и выводит его с 3 вариантами ответа. Суть в...

Отрисовка диалогового окна на главном.
Непонятная проблема возникла. Создал диалоговое окно, вызываю его, а оно отрисовывается на главном окне. Кто-нибудь с таким встречался? ...

Почему отрисовка начинается не с начала окна?
Ребята объясните пожалуйста. Начал разбираться в openGL. Возник вопрос хочу нарисовать обычную линию. glBegin(GL_LINES); ...

D3D11 - Отрисовка изображения в заданной части окна
Добрый день всем! Надеюсь на помощь форумчан в следующем вопросе: Итак, есть тектура, т.е. указатель на интерфейс ID3D11Texture2D...

Предотвратить сворачивание окна по нажатию кнопки Windows «Свернуть все окна»
Здравствуйте, пишу что то вроде гаджета на c# wpf, и возник вопрос: можно ли как нибудь предотвратить сворачивание окна при нажатии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru