Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 3

Как остановить событие Paint на время

16.12.2012, 19:07. Показов 2641. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пишу программу: бронирование авиабилетов. Создаю массив PictureBox для визуального представления мест. Номерую их при помощи события Paint. Создала событие MouseMove для смены цвета при наведение на место. Но когда я наводжу на место, номерация стирается. Помогите пожалуйста)

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
private void mas_MouseMove(object sender, EventArgs e)
        {
            PictureBox pb = (PictureBox)sender;
            pb.Paint -= new System.Windows.Forms.PaintEventHandler(mas_Paint);
            pb.BackColor = Color.YellowGreen;
        }
 
        private void mas_MouseLeave(object sender, EventArgs e)
        {
            PictureBox pb = (PictureBox)sender;
            pb.Paint -= new System.Windows.Forms.PaintEventHandler(mas_Paint);
            pb.BackColor = Color.Beige;
        }
 
        private void mas_Paint(object sender, PaintEventArgs e)
        {      
                PictureBox pb = (PictureBox)sender;
                Graphics g = e.Graphics;
                g.DrawString(count.ToString(), new Font("Arial", 10), System.Drawing.Brushes.Green, new Point(2, 3));
                count++;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            main.Location = new Point(10, 10);
            main.Text = "Оберіть місце:";
            main.Height = this.Height - 60;
            main.Width = this.Width - 35;
            this.Controls.Add(main);
 
            mas = new PictureBox[n, m];
            
            int temp = (m * 30) / 2 + 120;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m / 2; j++)
                {
                    mas[i, j] = new PictureBox();
                    mas[i, j].Location = new Point((i + 1) * 45, (j + 1) * 30);
                    mas[i, j].Width = 40;
                    mas[i, j].Height = 25;
                    mas[i, j].BackColor = Color.Beige;
                    mas[i, j].BorderStyle = BorderStyle.FixedSingle;
                    mas[i, j].Paint += new System.Windows.Forms.PaintEventHandler(mas_Paint);
                    mas[i, j].MouseEnter += new System.EventHandler(mas_MouseMove);
                    mas[i, j].MouseLeave += new System.EventHandler(mas_MouseLeave);
                    main.Controls.Add(mas[i, j]);
                    painting = true;
                }
 
                for (int j = m / 2; j < m; j++)
                {
                    mas[i, j] = new PictureBox();
                    mas[i, j].Location = new Point((i + 1) * 45, (j + 2) * 30);
                    mas[i, j].Width = 40;
                    mas[i, j].Height = 25;
                    mas[i, j].BackColor = Color.Beige;
                    mas[i, j].BorderStyle = BorderStyle.FixedSingle;
                    mas[i, j].Paint += new System.Windows.Forms.PaintEventHandler(mas_Paint);
                    mas[i, j].MouseEnter += new System.EventHandler(mas_MouseMove);
                    mas[i, j].MouseLeave += new System.EventHandler(mas_MouseLeave);
                    main.Controls.Add(mas[i, j]);
                    temp++;
 
                }
            }
 
 
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2012, 19:07
Ответы с готовыми решениями:

Как повторно вызвать событие Paint?
На форме имеется таблица с данными, и имеется Panel1. Изначально таблица пустая, после нажатия кнопки она заполняется данными, и мне нужно...

Как использовать графический буфер и событие Paint?
Есть форма, на ней picturebox. В событии Load формы создаю буфер: Graphics gr = pictureBox1.CreateGraphics(); BufferedGraphicsContext...

Как подписать метод на событие формы Paint
Например, я создаю объект и в конструкторе хочу подписать метод его рисования к Paint формы Form1, как это сделать?

1
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
17.12.2012, 05:54
После изменения фона, нужно рисовать номер заново. Для этого вам лучше где-нибудь хранить номер каждой картинки. Можно этот номер записывать в Tag картинки при создании.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2012, 05:54
Помогаю со студенческими работами здесь

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

Как правильно передать переменную в событие Paint
Привет. Объявил глобально переменную: int x = 0; В таймере x изменяется: private void timer1_Tick(object sender, EventArgs e) ...

Как остановить событие?
Здравствуйте! Я установил таймер и создаю объект, после создания его хочу остановить создание объектов и ждать пока объект не исчезнет...

Как принудительно вызвать событие Paint для формы?
Вопрос один - КАК? Пожалуйста не вбивайте в гугле так как я нихчего не нашёл кроме ведра говна в лицо. А по нормальному как сделать чтобы...

Как остановить системное время в биос
Всем привет, подскажите как остановить системное время в биосе? Какой скрипт запустить? В моем ноутбуке cq58-d75er стоит процессор i5,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru