Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Закрашивание ячеек в picturebox Visual Studio C#

Ответить
Настройки темы
Разное - [решено] Закрашивание ячеек в picturebox Visual Studio C#

Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Grafitchic
Дата: 18-09-2014
Здравствуйте, есть следующая задача:
- создать сетку;
- обеспечить в ней смену цвета ячейки по нажатию клавиши мыши. Один клик окрашивает ячейку в черный цвет, второй клик возвращает прежний цвет.

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


Код: Выделить весь код
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            int q = e.X; // координата по оси X
            int w = e.Y; // координата по оси Y
            int x = Convert.ToInt32(textBox1.Text);
            int y = Convert.ToInt32(textBox2.Text);
            int i = 0;
            int j = 0;
            int f = pictureBox1.Size.Width / x;
            int d = pictureBox1.Size.Height / y;
            int c, z;
            
                       

            do
            {
                i++;
                c = i * f;
            } while (c <= e.X);
            textBox3.Text = Convert.ToString(i);
            do
            {
                j++;
                z = j * d;
            } while (z < e.Y);
            textBox4.Text = Convert.ToString(j);

            
            Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
            SolidBrush blackbrush = new SolidBrush(Color.Black);
            SolidBrush whitebrush = new SolidBrush(Color.White);
            if (k==0)
            {
                g.FillRectangle(blackbrush, (i - 1) * f, (j - 1) * d, f, d);
                k++;
            }

            else
            {
                g.FillRectangle(whitebrush, (i - 1) * f, (j - 1) * d, f, d);
                k--;
            }
        }

Отправлено: 16:39, 18-09-2014

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Глобальная переменная (tmp), хранящая ссылку на нажатый объект ( координаты, кнопка, имя или что то еще).

При нажатии делать следующее:
1. Если tmp != null то закрашиваем ее в первоначальный цвет
2. Закрашиваем текущий элемент черным
3. Присваиваем tmp равному текущему элементу.

Все.

А обязательно делать это в PictureBox? не проще сделать DataGrid, DataGridView, разметочный Table или что то подобное? Тогда не надо возиться с координатами и прочим, достаточно просто указать нужную ячейку.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 09:53, 19-09-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


В двухмерный массив цветов состояние можно попробовать сохранять.

Если в первый раз произойдет клик по ячейке 1,1, а затем 2,2 и (3,3 и снова 1,1 то возвращение после 4 клика, а значит нужно постоянно хранить цвет каждого элемента сетки.

После выхода из функции, данные о цвете не сохраняются, а переменные не статические, поэтому цвет не возвращается. При выходе из функции, локальные переменные функции очищаются, то есть делаются "мусором" , и их каждый раз откуда-то надо восстанавливать

-------
Ehhh.. what's up, doc?..


Отправлено: 14:54, 19-09-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Delirium, mrcnn, а нельзя ли просто получать текущий цвет из координат щелчка мышкой?!

Отправлено: 16:01, 19-09-2014 | #4


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Iska, можно, но зачем? Это лишняя работа по поиску, а в моем варианте искать ничего не надо.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 01:59, 22-09-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Delirium:
Iska, можно, но зачем? »
Потому как проще, полагаю.

Цитата Delirium:
Это лишняя работа по поиску, »
Каким образом?

Цитата Delirium:
а в моем варианте искать ничего не надо. »
Первый вариант не годится. Тут скорее
Цитата mrcnn:
В двухмерный массив цветов состояние можно попробовать сохранять. »
и переменная под массив либо внешняя по отношению к функции, либо действительно статическая.

Если второе:
Цитата Delirium:
А обязательно делать это в PictureBox? не проще сделать DataGrid, DataGridView, разметочный Table или что то подобное? Тогда не надо возиться с координатами и прочим, достаточно просто указать нужную ячейку. »
— ничуть не спорю. Другое дело гоже ли сие автору темы. Больно уж похоже на типичное студзадание.

Мне просто было интересно узнать, можно ли так:
Цитата Iska:
Delirium, mrcnn, а нельзя ли просто получать текущий цвет из координат щелчка мышкой?! »
вообще сделать.

Отправлено: 14:42, 22-09-2014 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Закрашивание ячеек в picturebox Visual Studio C#

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Save Visual Studio 2005 - Open Visual Studio 2003 XCodeR Программирование и базы данных 3 07-07-2008 22:47
Софт/IDE - Visual Studio .Net mrcnn Программирование и базы данных 1 08-06-2008 21:05
visual studio 2005 holder Microsoft Windows 2000/XP 0 29-10-2006 21:33
visual studio c++ 7 ptt Программирование и базы данных 1 27-07-2004 16:13
Visual Studio 7.0 Bally Программирование и базы данных 1 26-02-2004 13:14




 
Переход