Member 12993442 Ответов: 1

Фон панели не найден


Привет,

У меня есть панель массива (8x8) на панели, которую я поместил backgroundImage с Proprietes.Буду рекомендовать друзьям
У меня есть как бы
Пионнуар Турнуар Рейненуар Руануар,Шевальнуар Фонуар и
Пионблан Турблан Рейнблан Ройблан,Шевальблан Фублан

я не могу любить образ, что
Но я хотел сделать что-то особенное, когда на панели у него есть Imagebackground



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 EchequeV2
{
    class Fou:Joueur
    {
        private int nbrPlaceY = 8;
        private int nbrPlaceX = 8;
        private int IndexeDiagonalY;
        private int IndexeDiagonalX;
        private int IndexeX;
        private int IndexeY;
        private List<Point> lstposition = new List<Point>();
        public Fou(string id, int y, int x) : base(id, y, x)
        {
            IndexeX = x;
            IndexeY = y;
            Reset();
        }
        private void loadData()
        {
            IndexeX = X;
            IndexeY = Y;
            lstposition = new List<Point>();
        }
        public override void Mouvement(Panel[,] tblPanel)
        {
            loadData();
            DiagonalDroite(tblPanel);
            for (int y = 0; y < nbrPlaceY; y++)
            {
                for (int x = 0; x < nbrPlaceX; x++)
                {
                    if (IndexeDiagonalX == x && IndexeDiagonalY == y)
                    {
                        lstposition.Add(new Point(x, y));
                        IndexeDiagonalY++;
                        IndexeDiagonalX--;
                    }
                }
            }

            DiagonalGauche(tblPanel);
            for (int y = 0; y < nbrPlaceY; y++)
            {
                for (int x = 0; x < nbrPlaceX; x++)
                {
                    if (IndexeDiagonalX == x && IndexeDiagonalY == y)
                    {
                        lstposition.Add(new Point(x, y));
                        IndexeDiagonalY++;
                        IndexeDiagonalX++;
                    }
                }
            }

            AffichageMouvement(lstposition, tblPanel);
        }
        private void AffichageMouvement(List<Point> lstPoint, Panel[,] tblPanel)
        {
            for (int i = 0; i < lstposition.Count; i++)
            {
                Point poDefault = new Point();

                poDefault.Y = lstposition[i].Y;
                poDefault.X = lstposition[i].X;
                if (poDefault.Y < 8 && poDefault.X < 8)
                    tblPanel[poDefault.Y, poDefault.X].BackColor = Color.Red;
            }


        }
        private void DiagonalDroite(Panel[,] tblPanel)
        {
            Reset();
            while (IndexeDiagonalY != 0 && IndexeDiagonalX != 8 - 1)
            {
                IndexeDiagonalX++;
                IndexeDiagonalY--;
            }
        }
        private void DiagonalGauche(Panel[,] tblPanel)
        {
            Reset();
            while (IndexeDiagonalY != 0 && IndexeDiagonalX != 0 )
            {
                IndexeDiagonalX--;
                IndexeDiagonalY--;
                if(ID.Contains("Blanc"))
                {
                    if (tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.PionBlanc ||
                        tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.ReineBlanc ||
                        tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.RoiBlanc ||
                        tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.ChevalBlanc ||
                        tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.Tour )
                    {
                        break;
                    }
                   
                }
                else
                {
                    if(tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage != null)
                    {
                        MessageBox.Show("Je suis la ");
                    }
                    if (tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.PionNoir ||
                        tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.ReineNoir ||
                        tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.RoiNoir ||
                        tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.ChevalNoir ||
                        tblPanel[IndexeDiagonalY, IndexeDiagonalX].BackgroundImage == Properties.Resources.TourNoir)
                    {

                        MessageBox.Show("JE SUIS VIVANTTTTTT ELED");
                    }
                }
               
            }
        }

        private void Reset()
        {
            IndexeDiagonalX = IndexeX;
            IndexeDiagonalY = IndexeY;
        }
    }
}


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

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

мне нужна твоя помощь :(

1 Ответов

Рейтинг:
10

OriginalGriff

Проблема заключается в том, что при извлечении изображения из Properties.Resources он создает новый экземпляр класса Image и заполняет его соответствующим растровым изображением.
Таким образом, поскольку панель содержит другой экземпляр тех же данных изображения, они не совпадают (потому что технически вы уже могли бы написать версию панели, и это не повлияло бы на новую загруженную версию.
Если вы хотите сравнить их, то необходимо загрузить каждое из изображений из ресурсов в начале вашего приложения и сохранить их в переменной Image для последующего использования и сравнения.
Попробовать это:

Image A = Properties.Resources.MyImage;
Image B = Properties.Resources.MyImage;
Console.WriteLine(A == B ? "Yes" : "No");
Вы всегда получите напечатанное "нет".


Member 12993442

Моя программа находится на Windows form у меня есть свой класс Fou,
Как я могу получить свое изображение, если я помещу его в форму windows, а не в код ?

Но спасибо, что вы ответили на все ВОП !!

OriginalGriff

Вы не можете - подумайте об этом: каждый раз, когда вы используете свойства.Ресурсы.MyImage чтобы извлечь изображение из вашего файла ресурсов, он загружает совершенно новое изображение и заполняет его. Когда вы сравниваете два изображения, он не делает сравнение пиксель за пикселем, он сравнивает ссылки, и поскольку они "указывают" на разные области памяти, они не являются одним и тем же изображением.
Если вы подумаете об этом, это единственный способ, которым это может работать: в противном случае вы не сможете получить GraphicsContext для вашего изображения и рисовать на нем, потому что это также повлияет на сохраненную версию ресурса - что будет означать обновление EXE-файла для отражения новых встроенных данных ресурса. Что будет выглядеть как вирусная активность (особенно если ваше приложение EXE будет находиться в папке Program Files в производстве), и ваше приложение будет закрыто с крайним предубеждением!

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

Member 12993442

Спасибо тебе, что я кое-чему научился в этот день !

Спасибо за ваше время и ваше решение :D

Всего хорошего Николя

OriginalGriff

Всегда пожалуйста!