Как добавить еще одну фотографию того же изображения в мою форму по нажатию кнопки с помощью C #? - PullRequest
0 голосов
/ 31 мая 2018

Я создал форму окна, которая, когда я нажимаю на кнопку, показывает движение панды.Это работает, когда я добавляю одну Панду, но я хочу, чтобы другая панда появлялась при нажатии кнопки.Я пытаюсь, когда я нажимаю на кнопку в другой раз, чтобы показать другую панду!Когда я нажимаю кнопку, моя панда исчезает и снова появляется из начальной точки и начинает двигаться!

(например, нажатие кнопки 3 раза = перемещение 3 панд в моей форме)

Это код для класса под названием "панда":

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

namespace test_moving_pic
{   
    class panda
    {
        public Image img_panda;
        public Rectangle rect_panda;
        
        public panda(Image img, Rectangle rect)
        {
            this.img_panda = img;
            this.rect_panda = rect;
        }       
    }
}

и это код, который я использовал для своей формы:

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 test_moving_pic
{
    public partial class Form1 : Form
    {
        Image image;
        Rectangle rect;

        int direction = 3;
        public Form1()
        {
            InitializeComponent();           
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
           Graphics g = e.Graphics;
            if (image != null && rect != null)
                g.DrawImage(image, rect);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            rect.X += this.direction;
            rect.Y += this.direction;

            if (rect.X <= 100 && rect.Y <= 100)
            {
                rect.X += this.direction;
                rect.Y += this.direction;
            }
            else
            {
                rect.Y += this.direction;
                if (rect.Y >= 100)
                {
                    rect.Y = 100;
                    rect.X += this.direction;
                }
            }
            
            Invalidate();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            panda p = new panda(Image.FromFile("C:\\Users\\hsnha\\OneDrive\\Desktop\\Panda.png"), new Rectangle(20, 20, 70, 70));
            image = p.img_panda;
            rect = p.rect_panda;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Попробуйте это:

public partial class Form1 : Form
{
    List<panda> pandaList = new List<panda>();
    int direction = 3;

    class panda
    {
        public Image img_panda;
        public Rectangle rect_panda;

        public panda(Image img, Rectangle rect)
        {
            this.img_panda = img;
            this.rect_panda = rect;
        }
    }

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        foreach (panda p in pandaList)
            g.DrawImage(p.img_panda, p.rect_panda);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        foreach (panda p in pandaList)
        {
            p.rect_panda.X += this.direction;
            p.rect_panda.Y += this.direction;

            if (p.rect_panda.X <= 100 && p.rect_panda.Y <= 100)
            {
                p.rect_panda.X += this.direction;
                p.rect_panda.Y += this.direction;
            }
            else
            {
                p.rect_panda.Y += this.direction;
                if (p.rect_panda.Y >= 100)
                {
                    p.rect_panda.Y = 100;
                    p.rect_panda.X += this.direction;
                }
            }

        }
        Invalidate();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        pandaList.Add(new panda(Image.FromFile(@"C:\Users\hsnha\OneDrive\Desktop\Panda.png"), new Rectangle(20, 20, 70, 70)));
    }
}
0 голосов
/ 31 мая 2018

Form1_Paint собирается нарисовать только одну панду.Вам нужно каким-то образом сохранить все созданные вами панды и нарисовать все панды методом Paint!Вам также необходимо обновить положение всех панд в Tick.

. Например: Определить члена в вашем классе List<panda> pandas; и

    private void button1_Click(object sender, EventArgs e)
    {
        panda p = new panda(Image.FromFile("C:\\Users\\hsnha\\OneDrive\\Desktop\\Panda.png"), new Rectangle(20, 20, 70, 70));
        pandas.Add(p);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        foreach (panda p in pandas)
        {
            Rectangle rect = p.rect_panda;
            // Fix the rect like before
        }
    }

И аналогично для Draw, зацикливаниепанды и рисовать каждый.Помогает ли это вам открепиться?

...