GameAddict1988 Ответов: 1

Несколько изображений в picturebox


Я новичок в программировании и пытаюсь научиться этому самостоятельно.Поэтому я должен добавить 2 разных изображения в picturebox ( в данном случае стол и стул, которые связаны с 2 кнопками toolstripbuttons). Мне нужно разместить несколько столов и стульев, чтобы я мог их переместить или убрать после этого. Но когда я расставляю столы и хочу добавить стулья, мои столы исчезают.
Есть ли также способ сохранить расположение изображений в picturebox, чтобы при повторном открытии проекта размещенные изображения находились на своих предыдущих местах?

Что я уже пробовал:

Это основная форма
<pre>namespace WORKSPACE
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        SPACE space;

        enum OPTION
        {
            PLACE,
            REMOVE,
            REPLACE
        }

        OPTION OPTIONS = OPTION.PLACE;

        Image figure;

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void pLACEToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OPTIONS = OPTION.PLACE;
        }

        private void rEMOVEToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OPTIONS = OPTION.REMOVE;

        }

        private void rEPLACEToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OPTIONS = OPTION.REPLACE;
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            toolStripStatusLabel1.Text = "X:" + e.X.ToString() + "Y:" + e.Y.ToString();
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (OPTIONS== OPTION.PLACE)
            {
                space.PLACE(e.X, e.Y);
            }
            else
                if (OPTIONS == OPTION.REPLACE)
            {
                space.REPLACE(e.X, e.Y);
            }
            else
                if (OPTIONS == OPTION.REMOVE)
            {
                space.REMOVE(e.X, e.Y);
            }
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            figure = toolStripButton1.Image;
            space = new SPACE(pictureBox1.CreateGraphics(), figure);
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            figure = toolStripButton2.Image;
            space = new SPACE(pictureBox1.CreateGraphics(), figure);
        }
    }
}
This is the class I created


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;

namespace WORKSPACE
{
    class SPACE
    {
        int COUNTER = 0;
        
        
        Graphics G;
        List<Rectangle> SPACES;
        Rectangle MOUSE;
        Boolean STATUSREPLACE = false;
        int SPACECOUNTER;
        int DUMMY;
        Image figure;
        

        public SPACE(Graphics g,Image f)
        {
            G = g;
            figure = f;
          
            
            SPACES = new List<Rectangle>();
        }

        public void PLACE(int X, int Y)
        {
            COUNTER++;
            SPACES.Add(new Rectangle(X, Y, 20, 20));
            DRAWSPACE();
        }

        public void DRAWSPACE()
        {
            SPACETELLER = 1;
            G.Clear(Color.White);
            foreach (Rectangle r in SPACES)
            {
                G.DrawImage(figure,r.X,r.Y);
                SPACECOUNTER++;
            }
        }
        public void DRAWSPACECHAIR()
        {
            SPACECOUNTER = 1;
            G.Clear(Color.White);
            foreach (Rectangle r in SPACES)
            {
                G.DrawImage(figure, r.X, r.Y);
                SPACECOUNTER++;
            }
        }

        public void REPLACE(int X, int Y)
        {
            SPACECOUNTER = 1;
            MOUSE = new Rectangle(X, Y, 2, 2);
            foreach (Rectangle r in SPACES)
            {
                if (MOUSE.IntersectsWith(r))
                {
                    if (STATUSREPLACE == false)
                    {
                        SPACES.Remove(r);
                        STATUSREPLACE = true;
                        DUMMY = SPACECOUNTER;
                        return;
                    }
                }
                SPACECOUNTER++;
            }
            if (STATUSREPLACE == true)
            {
                SPACES.Insert(--DUMMY, new Rectangle(X, Y, 20, 20));
                STATUSREPLACE = false;
                DRAWSPACE();
                DRAWSPACECHAIR();
            }
        }
        public void REMOVE(int X, int Y)
        {
            SPACECOUNTER = 1;
            MOUSE = new Rectangle(X, Y, 2, 2);
            foreach (Rectangle r in SPACES)
            {
                if (MOUSE.IntersectsWith(r))
                {
                    
                    SPACES.Remove(r);
                    break;
                    
                }
                
            }
            DRAWSPACE();
            DRAWSPACECHAIR();
        }

    }  
}

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Вы можете поместить только одно изображение в элемент управления PictureBox, поэтому вам придется рисовать изображения самостоятельно. Честно говоря, я бы вообще не стал использовать для этого PictrueBox, но scine, который вы изучаете, сохраняйте его.

Вы должны создать новое растровое изображение, нарисовать необходимые изображения в этом растровом изображении, а затем установить PictureBox, чтобы показать новое изображение.

При использовании графических объектов GDI обязательно вызовите команду Dispose для этих объектов. У вас есть глобальные переменные, что является плохой практикой. Вы объявляете их только там, где они вам нужны.