Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Закрашивание ячеек в picturebox Visual Studio C# (http://forum.oszone.net/showthread.php?t=288138)

Grafitchic 18-09-2014 16:39 2404489

Закрашивание ячеек в picturebox Visual Studio C#
 
Здравствуйте, есть следующая задача:
- создать сетку;
- обеспечить в ней смену цвета ячейки по нажатию клавиши мыши. Один клик окрашивает ячейку в черный цвет, второй клик возвращает прежний цвет.

получилось создать сетку в 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--;
            }
        }


Delirium 19-09-2014 09:53 2404716

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

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

Все.

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

mrcnn 19-09-2014 14:54 2404857

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

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

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

Iska 19-09-2014 16:01 2404882

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

Delirium 22-09-2014 01:59 2405584

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

Iska 22-09-2014 14:42 2405716

Цитата:

Цитата Delirium
Iska, можно, но зачем? »

Потому как проще, полагаю.

Цитата:

Цитата Delirium
Это лишняя работа по поиску, »

Каким образом?

Цитата:

Цитата Delirium
а в моем варианте искать ничего не надо. »

Первый вариант не годится. Тут скорее
Цитата:

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

и переменная под массив либо внешняя по отношению к функции, либо действительно статическая.

Если второе:
Цитата:

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

— ничуть не спорю. Другое дело гоже ли сие автору темы. Больно уж похоже на типичное студзадание.

Мне просто было интересно узнать, можно ли так:
Цитата:

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

вообще сделать.


Время: 04:28.

Время: 04:28.
© OSzone.net 2001-