Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
3 / 3 / 1
Регистрация: 10.01.2015
Сообщений: 69

Закрасить участок в сетке (квадрат)

04.09.2015, 15:29. Показов 3256. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем.

Создаю сетку из квадратов.
Необходимо, при нажатии на любой квадрат, закрасить его.
Подскажите, пожалуйста, как это можно реализовать?

Вот код создание сетки:
C++
1
2
3
4
5
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
        Graphics ^ setka = pictureBox1->CreateGraphics();
        DrawSetka(setka);
    }
Далее идёт остальной код:
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
        void DrawSetka(Graphics ^e)
        {
            Pen ^ blackPen = gcnew Pen(Color::Black, 3.0f);
            SolidBrush^ Brush = gcnew SolidBrush(Color::Orange);
            int step = 10;
 
            form_x = MyForm::Width;
            form_y = MyForm::Height;
 
            for (int i = 0; i < form_y; i += step)
            {
                for (int j = 0; j < form_x; j += step)
                {
                    Rectangle rect = Rectangle(j, i, step, step);
                    e->DrawRectangle(blackPen, rect);
                }
            }
        }
        void mouseClick(Object ^ /*sender*/, MouseEventArgs^ e)
        {
            Graphics ^ setka = this->pictureBox1->CreateGraphics();
 
            int step = 10;
 
            form_x = MyForm::Width;
            form_y = MyForm::Height;
 
            SolidBrush^ Brush = gcnew SolidBrush(Color::Orange);
 
            // Что делать тут?
 
            /*for (int i = 0; i < form_y; i += step)
            {
                for (int j = 0; j < form_x; j += step)
                {
                    Rectangle rect = Rectangle(j, i, step, step);
                    setka->FillRectangle(Brush, rect);
                }
            }*/
        }
Помогите, пожалуйста. Долго ломаю голову.
Есть выбор, если записывать все координаты создания в массив. И потом сверять, находится ли мышка в 1 из квадратов. Но это как-то слишком(моё мнение..). Может есть альтернатива?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2015, 15:29
Ответы с готовыми решениями:

Закрасить участок шахматной доски
Люди помогите плиз, у меня в С++ вообще башка не варит((( написать программу для выполнения следующей задачи (): Нужно решить такую...

Закрасить квадрат
как закрасить только область квадрата

Закрасить квадрат штриховкой
как написать программу с помошю SetBrushStyle(3); оно должно закрасить квадрат штриховкой, а не чего не происходит: uses graphABC; ...

9
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
04.09.2015, 15:44
и что сетка прорисовывается? вроде не должна, а закраска в событии по клику на pictureBox1
0
3 / 3 / 1
Регистрация: 10.01.2015
Сообщений: 69
04.09.2015, 15:47  [ТС]
MansMI, да, рисуется.



как правильно сделать, чтобы красилась?
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
04.09.2015, 16:28
Лучший ответ Сообщение было отмечено KrYpToDeN как решение

Решение

C++
1
2
3
4
5
6
7
8
9
    private: System::Void pictureBox1_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) 
     {
         int step = 10;
         int x=e->X/step*step+2;
         int y=e->Y/step*step+2;
         Graphics ^ g = Graphics::FromImage(pictureBox1->Image);
         g->FillRectangle(Brushes::Orange,x,y,step-3,step-3);
         pictureBox1->Refresh();
     }
тут отвечать будут быстрее: https://www.cyberforum.ru/cpp-cli-winforms/
2
3 / 3 / 1
Регистрация: 10.01.2015
Сообщений: 69
04.09.2015, 16:44  [ТС]
MansMI, оо, спасибо большое.
смотри только
C++
1
Graphics ^ g = Graphics::FromImage(pictureBox1->Image);
Происходит вылет.

Если заменить на:
C++
1
Graphics ^ g = pictureBox1->CreateGraphics();
и убрать refresh, то норм всё) Спасибо большое!)
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
04.09.2015, 16:53
да, не заметил, что Image не создается, мой код верен при наличии Image
1
3 / 3 / 1
Регистрация: 10.01.2015
Сообщений: 69
04.09.2015, 17:03  [ТС]
MansMI, Спасибо большое ещё раз)

Добавлено через 3 минуты
MansMI, сразу ещё вопрос. можно ли как-то получить цвет ячейки этой? Ну тоесть узнать, какой цвет установлен.
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
04.09.2015, 17:19
по теме Image: сверни/разверни/заслони окно

Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    private: System::Void pictureBox1_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) 
     {
         if(e->Button==System::Windows::Forms::MouseButtons::Left)
         {
             int step = 10;
             int x=e->X/step*step+2;
             int y=e->Y/step*step+2;
             Graphics ^ g = Graphics::FromImage(pictureBox1->Image);
             g->FillRectangle(Brushes::Orange,x,y,step-3,step-3);
             pictureBox1->Refresh();
         }
         else Text=((Bitmap^)pictureBox1->Image)->GetPixel(e->X,e->Y).ToString();
     }
0
3 / 3 / 1
Регистрация: 10.01.2015
Сообщений: 69
05.09.2015, 17:22  [ТС]
подниму тему.

Такой вопрос образовался. Долго мучаюсь с этой темой.
Как и через что лучше всего создать сетку с квадратами, чтобы потом можно было управлять ей.
Тоесть закрасить квадрат при нажатии. Получить индекс закрашенного квадрата и тд.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
06.09.2015, 18:30
Цитата Сообщение от KrYpToDeN Посмотреть сообщение
Тоесть закрасить квадрат при нажатии. Получить индекс закрашенного квадрата и тд.
Это только вручную. Проверять расположение мыши и закрашивать тот квадрат, который попал под указатель.
По поводу
Цитата Сообщение от MansMI Посмотреть сообщение
по теме Image: сверни/разверни/заслони окно
KrYpToDeN, любая перерисовка контрола (вызванная сообщением WM_PAINT) будет очищать закрашенную область. Перекрашивать квадраты нужно при каждой перерисовке - обработайте событие Paint и там рисуйте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2015, 18:30
Помогаю со студенческими работами здесь

Закрасить определенный квадрат изображения
На мой вгляд - слишком много слов (целый день вникал). Помогите, чем сможите. Заранее огромное спасибо!

Закрасить квадрат тем же цветом, что и два крайних
Здравствуйте! Мне срочно нужна помощь. В общем, нужно составить программу в PascalABC.net Суть её такова: У вас имеется три квадрата....

В графическом режиме(вручную) нарисовать квадрат и закрасить всё внутри него
Ребят, спасайте. Вы последняя надежда. Завтра сдавать лабу, а как написать её не понимаю. В графическом режиме(вручную) нарисовать...

Построить и закрасить квадрат со стороной 30 пикселов, центр которого совмещен с центром экрана
Построить и закрасить квадрат со стороной 30 пикселов, центр которого совмещен с центром экрана. Стороны квадрата должны быть параллельны...

Построить и закрасить квадрат со стороной 30 пиксел, центр которого совмещен с центром экрана
Построить и закрасить квадрат со стороной 30 пиксел, центр которого совмещен с центром экрана. Стороны квадрата должны быть параллельны...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru