Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2020, 12:17   #1
NewUser111
 
Регистрация: 23.10.2020
Сообщений: 6
По умолчанию Как правильно очистить массив в С# Winforms

Здравствуйте, сделал программу рисования с двумя режимам: рисование линии и прямоугольников.
Все точки хранятся в массивах. После нажатия кнопки стереть, все стирается, но при возвращение в режимы старые линии и фигуры появляются. Поробовал Array.Clear(), но возращается ошибка "System.NullReferenceException: 'Ссылка на объект не указывает на экземпляр объекта.'"
Подскажите, как изменить, чтобы после стирания можно было опять рисовать и старые фигуры с линиями не появлись

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace GraphicEditor
{
    public partial class Form1 : Form
    {
        int cnt = 0, cnt1 = 0;
        Point[][] p, p1;
        bool mdown;
        public Form1()
        {
            InitializeComponent();
            pictureBox1.BackColor = Color.Gray;
            mdown = false;
           //Массив хранения точек линии
            p = new Point[100][];
            for (int i = 0; i < 100; ++i)
                p[i] = new Point[2];
            //Массив хранения точек прямоугольников
            p1 = new Point[100][];
            for (int i = 0; i < 100; ++i)
                p1[i] = new Point[2];
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            mdown = true;
            if (lineButton.Checked)
            {
                p[cnt][0].X = e.X;
                p[cnt][0].Y = e.Y;
            }

            if (rectangleButton.Checked)
            {
                p1[cnt1][0].X = e.X;
                p1[cnt1][0].Y = e.Y;
            }
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if ((mdown) && (lineButton.Checked))
            {
                p[cnt][1].X = e.X;
                p[cnt][1].Y = e.Y;
            }

            if ((mdown) && (rectangleButton.Checked))
            {
                p1[cnt1][1].X = e.X;
                p1[cnt1][1].Y = e.Y;
            }
            pictureBox1.Invalidate();

        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            mdown = false;
            if (lineButton.Checked)
            {
                p[cnt][1].X = e.X;
                p[cnt][1].Y = e.Y;
                cnt++;
            }

            if (rectangleButton.Checked)
            {
                p1[cnt1][1].X = e.X;
                p1[cnt1][1].Y = e.Y;
                cnt1++;
            }

        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            if ((lineButton.Checked) || (rectangleButton.Checked))
            {
                for (int i = 0; i < cnt; ++i)
                {
                    g.DrawLine(new Pen(Color.Black), p[i][0].X, p[i][0].Y, p[i][1].X, p[i][1].Y);
                }
                if (mdown)
                {
                    g.DrawLine(new Pen(Color.Black), p[cnt][0].X, p[cnt][0].Y, p[cnt][1].X, p[cnt][1].Y);
                }

                for (int i = 0; i < cnt1; ++i)
                {
                    g.DrawRectangle(new Pen(Color.Black), p1[i][0].X, p1[i][0].Y, p1[i][1].X - p1[i][0].X, p1[i][1].Y - p1[i][0].Y);
                }
                if (mdown)
                {
                    g.DrawRectangle(new Pen(Color.Black), p1[cnt1][0].X, p1[cnt1][0].Y, p1[cnt1][1].X - p1[cnt1][0].X, p1[cnt1][1].Y - p1[cnt1][0].Y);
                }
            }
            if (clearButton.Checked)
            {
                g.Clear(Color.Gray);
                Array.Clear(p, 0, cnt);//ошибку вызывает
                Array.Clear(p1, 0, cnt);//ошибку вызывает

            }
        }

    }
}
NewUser111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очистить массив Shouldercannon Общие вопросы Delphi 3 24.12.2017 22:07
как очистить массив??? yura_zb Общие вопросы C/C++ 4 02.05.2011 21:43
Массив кнопок в WinForms N1KeL Windows Forms 3 24.05.2010 22:53
Кнопка очистить и удалить не правильно работают Хамстер Помощь студентам 5 26.07.2009 23:31
Как очистить массив? chandrasecar Общие вопросы Delphi 9 09.11.2008 20:39