AngenOfBATYA
@AngenOfBATYA

Как сравнить button==button из массива в c#?

Приветствую , проблема токая при нажатия Button сох. и выбрать второй Button и сравнить .0029b0248fe64e9f8cf5666574637ffe.png
int a = 0;
        int k = 0;
        int[] mas = new int[30];
        Random rand = new Random();
        Button[,] S = new Button[15, 15];    
        public Form1()
        {
            InitializeComponent();
        }
        private void новаяИграToolStripMenuItem_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 15; ++i)
                for (int j = 0; j < 15; ++j)
                {
                    {
                        for (k = 0; k < 15; k++)
                        {
                            mas[k] = k;
                        }
                        int f = rand.Next(25);
                        a = mas[k];
                        mas[k] = mas[f];
                        mas[f] = a;
                        S[i, j] = new Button();
                        S[i, j].Location = new Point(i * 40 + 350, j * 40 + 50);
                        S[i, j].Size = new Size(45, 45);
                        S[i, j].MouseClick += new MouseEventHandler(S_MouseClick);
                        S[i, j].Text = mas[k].ToString();                  
                        Controls.Add(S[i, j]);
                       
                    }
                }
        }
        
        void S_MouseClick(object sender, MouseEventArgs e)
        {
            
            (sender as Button).Text= "@_@";
               
           

        }
  • Вопрос задан
  • 404 просмотра
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Кнопки сравнить просто так не получится, это разные экземпляры и они будут разными, даже если имеют одинаковый набор значений свойств.

Можно сравнить, например, Text.

Для этого достаточно сделать переменную на уровне класса, в которую помещать текст первой нажатой кнопки (или ссылку на саму кнопку). Когда будет нажата следующая кнопка, сравнивать её текст с сохраненным значением.

private Button FirstButton = null;

void S_MouseClick(object sender, MouseEventArgs e)
{
  var button = (sender as Button);

  if (this.FirstButton == null)
  {
    // это первая кнопка в текущей сессии,
    // запоминаем ссылку на кнопку
    this.FirstButton = button;
  }
  else
  {
    // это вторая кнопка в текущей сессии
    // сравниваем текст с первой
    if (this.FirstButton.Text == button.Text)
    {
      Console.WriteLine("Текст совпадает!");
      // меняем свойства кнопок
      this.FirstButton.Text = button.Text = "--";
      this.FirstButton.Enabled = button.Enabled = false;
    }
    else
    {
      Console.WriteLine("Текст не совпадает.");
    }
    // сбрасываем выбор, запуская тем самым новую сессию
    this.FirstButton = null;
  }
}

Если понадобится сравнивать более двух кнопок, то придется делать коллекцию.

Вместо Text можно сравнивать по какому-нибудь другому признаку. У элементов есть свойство Tag, которое можно использовать для хранения любых дополнительных данных.

Если все будет совсем сложно, то можно расширить Button дополнительными свойствами путем наследования. В таком случае можно будет переопределить Equals и с операторами поиграть.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы