F
F
fapchat2021-12-22 14:40:29
C++ / C#
fapchat, 2021-12-22 14:40:29

How to solve System.NullReferenceException error?

Here is the code:

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 WindowsFormsApp1
{
   
    public partial class Form1 : Form
    {
        // Битовая картинка pictureBox
        Bitmap pictureBoxBitMap;
        // Битовая картинка динамического изображения
        Bitmap spriteBitMap;
        // Битовая картинка для временного хранения области экрана
        Bitmap cloneBitMap;
        // Графический контекст picturebox
        Graphics g_pictureBox;
        // Графический контекст спрайта
        Graphics g_sprite;
        int x, y; // Координаты автобуса
        int width = 451, height = 209; // Ширина и высота автобуса
        Timer timer;
        public Form1()
        {
            InitializeComponent();
        }

        void DrawSprite()
        {
            // Рисуем колеса
            g_sprite.DrawEllipse(new Pen(Color.Black, 2), 70, 150, 60, 60);
            g_sprite.FillEllipse(new SolidBrush(Color.Black), 70, 150, 60, 60);
            g_sprite.DrawEllipse(new Pen(Color.Black, 2), 350, 150, 60, 60);
            g_sprite.FillEllipse(new SolidBrush(Color.Black), 350, 150, 60, 60);
            // Рисуем корпус автобуса
            Point[] points = new Point[6] { new Point(1,1), new Point(430,1),
                new Point(450, 90), new Point(450, 180),
                new Point(1, 180), new Point(1, 1)
            };
            g_sprite.FillPolygon(Brushes.Yellow, points);
            g_sprite.DrawPolygon(new Pen(Color.Black, 2), points);
            // Рисуем четыре пассажирских окна
            for (int i = 0; i < 4; i++)
            {
                g_sprite.FillRectangle(Brushes.LightGray, 10 + i * 60 + i * 10, 10, 60, 80);
                g_sprite.DrawRectangle(new Pen(Color.Black, 2), 10 + i * 60 + i * 10, 10, 60, 80);
            }

            // Рисуем контур двери
            g_sprite.DrawRectangle(new Pen(Color.Black, 2), 290, 10, 60, 160);
            // Рисуем окно двери и контур окна
            g_sprite.FillRectangle(Brushes.LightGray, 295, 15, 50, 90);
            g_sprite.DrawRectangle(new Pen(Color.Black, 2), 295, 15, 50, 90);
            // Рисуем окно кабины и его контур
            Point[] point = new Point[5]{ new Point(360,10), new Point(420,10),
                new Point(438,90), new Point(360,90), new Point(360,10)
            };
            g_sprite.FillPolygon(Brushes.LightGray, point);
            g_sprite.DrawPolygon(new Pen(Color.Black, 2), point);
        }
        // Функция сохранения части изображения шириной
        void SavePart(int xt, int yt)
        {
            Rectangle cloneRect = new Rectangle(xt, yt, width, height);
            System.Drawing.Imaging.PixelFormat format =

            pictureBoxBitMap.PixelFormat;
            // Клонируем изображение, заданное прямоугольной областью
            cloneBitMap = pictureBoxBitMap.Clone(cloneRect, format);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer.Enabled = true;

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Создаём Bitmap для pictureBox1 и графический контекст
            pictureBox1.Image = Image.FromFile(@"fon.jpg");
            pictureBoxBitMap = new Bitmap(pictureBox1.Image);
            g_pictureBox = Graphics.FromImage(pictureBox1.Image);
            // Создаём Bitmap для спрайта и графический контекст
            spriteBitMap = new Bitmap(width, height);
            g_sprite = Graphics.FromImage(spriteBitMap);
            // Рисуем линию движения автобуса
            g_pictureBox.DrawLine(new Pen(Color.Black, 2), 0, 410,
            pictureBox1.Width - 1, 410);
            // Рисуем автобус на графическом контексте g_sprite
            DrawSprite();
            // Создаём Bitmap для временного хранения части изображения
            cloneBitMap = new Bitmap(width, height);
            // Задаем начальные координаты вывода движущегося объекта
            x = 0; y = 200;
            // Сохраняем область экрана перед первым выводом объекта
            SavePart(x, y);
            // Выводим автобус на графический контекст g_pictureBox
            g_pictureBox.DrawImage(spriteBitMap, x, y);
            // Перерисовываем pictureBox1
            pictureBox1.Invalidate();
            // Создаём таймер с интервалом 100 миллисекунд
            timer = new Timer();
            timer.Interval = 100;
            timer.Tick += new EventHandler(timer1_Tick);
        }

        // Обрабатываем событие от таймера
        private void timer1_Tick(object sender, EventArgs e)
        {
            // Восстанавливаем затёртую область статического изображения
            g_pictureBox.DrawImage(cloneBitMap, x, y);
            // Изменяем координаты для следующего вывода автобуса
            x += 6;
            // Проверяем на выход изображения автобуса за правую границу
            if (x > pictureBox1.Width - 1) x = pictureBox1.Location.X;
            // Сохраняем область экрана перед первым выводом автобуса
            SavePart(x, y);
            // Выводим автобус
            g_pictureBox.DrawImage(spriteBitMap, x, y);
            // Перерисовываем pictureBox1
            pictureBox1.Invalidate();
        }
        // Включаем таймер по нажатию на кнопку

    }
}


So, here I have on line 80, where an error occurstimer.Enabled = true;
System.NullReferenceException: "Object reference does not point to an instance of an object."

timer was null.

How to solve it? I tried to do something, change this code, use the timer manually in the form constructor, but nothing helped.61c30e8b0052b736625340.jpeg

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question