|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Закрашивание ячеек в picturebox Visual Studio C# |
|
|
Разное - [решено] Закрашивание ячеек в picturebox Visual Studio C#
|
|
Новый участник Сообщения: 16 |
Здравствуйте, есть следующая задача:
- создать сетку; - обеспечить в ней смену цвета ячейки по нажатию клавиши мыши. Один клик окрашивает ячейку в черный цвет, второй клик возвращает прежний цвет. получилось создать сетку в 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 |
|
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Глобальная переменная (tmp), хранящая ссылку на нажатый объект ( координаты, кнопка, имя или что то еще).
При нажатии делать следующее: 1. Если tmp != null то закрашиваем ее в первоначальный цвет 2. Закрашиваем текущий элемент черным 3. Присваиваем tmp равному текущему элементу. Все. А обязательно делать это в PictureBox? не проще сделать DataGrid, DataGridView, разметочный Table или что то подобное? Тогда не надо возиться с координатами и прочим, достаточно просто указать нужную ячейку. |
|
------- Отправлено: 09:53, 19-09-2014 | #2 |
|
Ветеран Сообщения: 1405
|
Профиль | Отправить PM | Цитировать В двухмерный массив цветов состояние можно попробовать сохранять.
Если в первый раз произойдет клик по ячейке 1,1, а затем 2,2 и (3,3 и снова 1,1 то возвращение после 4 клика, а значит нужно постоянно хранить цвет каждого элемента сетки. После выхода из функции, данные о цвете не сохраняются, а переменные не статические, поэтому цвет не возвращается. При выходе из функции, локальные переменные функции очищаются, то есть делаются "мусором" , и их каждый раз откуда-то надо восстанавливать |
|
------- Отправлено: 14:54, 19-09-2014 | #3 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Delirium, mrcnn, а нельзя ли просто получать текущий цвет из координат щелчка мышкой?!
|
|
Отправлено: 16:01, 19-09-2014 | #4 |
|
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Iska, можно, но зачем? Это лишняя работа по поиску, а в моем варианте искать ничего не надо.
|
|
|
------- Отправлено: 01:59, 22-09-2014 | #5 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Delirium:
Цитата Delirium:
Цитата Delirium:
Цитата mrcnn:
Если второе: Цитата Delirium:
Мне просто было интересно узнать, можно ли так: Цитата Iska:
|
||||||
|
Отправлено: 14:42, 22-09-2014 | #6 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| 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 | |
|