Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5

Как избежать мерцания при перерисовке Panel

13.09.2012, 19:12. Показов 6250. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо чтобы после того, как загнал все точки в список (List), их отрисовало на panel. Причем так, чтобы "не моргала" панель. Быть может подскажет кто, как решить эту проблемку?
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Lab_1_MiAPR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // массив точек
        private List<Points> pointArray = new List<Points>();
 
        private void button1_Click(object sender, EventArgs e)
        {
            // читаем значения с полей
            int cntPoints = Convert.ToInt32(cntBox.Text); // сколько объектов
            int cntClass  = Convert.ToInt32(cntCls.Text); // сколько классов объектов
            // создаем экземляры объектов и задаем им случайные значения
            for(int i = 0; i < cntPoints; i++)
            {
                pointArray.Add(new Points(panel.Width-10,panel.Height-10));
            }
            
        }
 
        private void panel_Paint(object sender, PaintEventArgs e)
        {
            foreach (Points pt in pointArray)
            {
                e.Graphics.DrawRectangle(new Pen(Color.Black, 1),new Rectangle(pt.x,pt.y,1,1));
            }
            panel.Refresh();
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2012, 19:12
Ответы с готовыми решениями:

Как избежать мерцания при перетаскивании формы
Пользуясь случаем Вы не подскажите как избедать мерцания при перетаскивании формы своими силами??? Блин, я помню, что когда то решал эту...

Графика в Windows forms - как избежать мерцания при анимации
Необходимо создать несложную движения анимацию в Windows Forms. Как сделать это наиболее эффективно, чтобы не возникало эффекта...

Как убрать мерцания картинки элемента Panel?
Да, все та же двойная буферизация. Итак, начну сначала. Вся моя программа состоит из формы, на которой находится панель panel1. Также...

11
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
13.09.2012, 20:14
Попробуйте добавить в конструктор формы
C#
1
this.DoubleBuffered = true
0
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
13.09.2012, 20:19
Проверил. Не помогло
0
 Аватар для GRooN
52 / 52 / 15
Регистрация: 22.02.2011
Сообщений: 87
13.09.2012, 20:29
C#
1
2
3
4
5
public Form1()
{
    InitializeComponent();
    panel.GetType().GetMethod("SetStyle", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(panel, new object[] { ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.UserPaint, true});
}
0
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
13.09.2012, 20:34
Не помогло. Все равно рисует по точке, нажимая при этом на кнопку.
0
 Аватар для GRooN
52 / 52 / 15
Регистрация: 22.02.2011
Сообщений: 87
13.09.2012, 20:42
Точка все равно мерцает? И в чем смысл все точки рисовать в одном месте(не зависимо от вводимых значений)? Может посвятите в суть задачи?
0
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
13.09.2012, 20:45
Мне нужно, после того, как все точки созданы и расположены в List<Points> их нарисовать на Panel. Однако в обработчике Paint, идет отрисовка только точки(одной). Других как будто-бы и нет...

В конструкторе Point, следующий код:
C#
1
2
3
4
5
6
        public Points(int maxX, int maxY)
        {
            Random random = new Random();
            x = random.Next(maxX);
            y = random.Next(maxY);
        }
0
 Аватар для GRooN
52 / 52 / 15
Регистрация: 22.02.2011
Сообщений: 87
13.09.2012, 20:48
Всё правильно, у вас всем точкам задается одинаковые координаты
C#
1
pointArray.Add(new Points(panel.Width-10,panel.Height-10));
тут все значения фиксированные
0
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
13.09.2012, 20:50
Но почему? В конструктор же они подаются как максимальные значения для генератора случайных чисел? В констукторе, инициализация координат точки идет.
0
 Аватар для GRooN
52 / 52 / 15
Регистрация: 22.02.2011
Сообщений: 87
13.09.2012, 20:56
пришлите код класса Points
0
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
13.09.2012, 22:31
Вот он:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Lab_1_MiAPR
{
    class Points
    {
        public int x, y;      // координаты объекта
 
        // задание параметров для объекта с помощью конструктора
        public Points(int maxX, int maxY)
        {
            Random random = new Random();
            x = random.Next(maxX);
            y = random.Next(maxY); 
        }
    }
}
Добавлено через 1 час 32 минуты
Ради интереса написал этот кусочек и вставил в обработчик кнопки. Мне хотелось проверить, будет ли рисовать N точек, которые я поместил в список. Что получилось:
- В списке есть все элементы, которые я проинициализировал ранее
- В этом фрагменте, в foreach, элементы из списка считываются в obj корректно и хранят позицию его на форме
- После первой "итерации", берет новый элемент, но его "не добавляет"/не отрисовывает на битмапе(скорей всего так), и не выводит на picturebox...
Вопрос. Почему так? Почему после первой итерации не рисует на объекте, хотя из списка элемент считан?
C#
1
2
3
4
5
6
7
8
            Bitmap bmp = new Bitmap(pictureBox.Width, pictureBox.Height);
            Graphics gr = Graphics.FromImage(bmp);
            foreach(Points obj in pointArray)
            {
               gr.DrawRectangle(new Pen(Color.Red,5),obj.x,obj.y,4,4);
            }
            pictureBox.Image = bmp;
            gr.Dispose();
0
 Аватар для GRooN
52 / 52 / 15
Регистрация: 22.02.2011
Сообщений: 87
14.09.2012, 12:47
C#
1
2
3
4
5
6
7
8
9
10
11
12
    class Points
    {
       private static Random random = new Random();
        public int x, y;      // координаты объекта
 
        // задание параметров для объекта с помощью конструктора
        public Points(int maxX, int maxY)
        {
            x = random.Next(maxX);
            y = random.Next(maxY); 
        }
    }
Создание новой точки создает новый экземпляр Random, поэтому все значения будут одинаковы, а статическое поле будет одно для всех
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2012, 12:47
Помогаю со студенческими работами здесь

WinApi в C# или как избавиться от мерцания формы при перерисовке
В С# как можно до api добраться? У меня при перерисовке форма моргает - просто ужаSS. WM_EraseBckgrnd как нибудь можно выдернуть? или в С#...

Как избежать мерцания картинок (картинки-кнопки)?
У меня есть форма, на которой 2 картинки. Первая картинка с изображением обычной кнопки. Вторая картинка - изображение активной...

Как правильнее обновлять графику, чтобы избежать мерцания
Вопрос глупейший впринципе. В таймере каждую секунду отображаю через графику время на панели. чтобы время менялось приходится делать...

Избавится от мерцания panel
Здравствуйте. Вот код: public void CreateEllements() { this.DoubleBuffered = true; DHEGif =...

Как сохранить фон при перерисовке?
Помогите разобраться, пожалуйста. Хотела бы, чтобы новый фрагмент перерисовывался в панели gallereja на старом фоне. Вместо этого фон при...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru