Создание нескольких кнопок одного класса - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь создать около 25 кнопок класса ButtonControls, которые наследуются от обычного Button класса с вложенными циклами for для создания квадрата.Я добавил специальные свойства, названные coordsX и coordsY, которые я использую, чтобы знать, где они должны быть размещены в форме, и для какого-то другого использования, которое слишком сложно объяснить здесь.Когда я создаю кнопку, она помещается туда, где она должна быть, и записывает ее «координаты» в виде текста, и она показывает правильные значения, но когда я нажимаю на нее, должно появиться окно сообщения и дать мне координаты этой кнопки, но это всегдапоказывает координаты последней созданной кнопки.

private void CreateBoard()
        {
            for (int x=0;x<BoardWidth;x++)
            {
                for (int y=0;y<BoardHeight;y++)
                {
                    ButtonControls bc = new ButtonControls(x,y,PieceSize);
                    //bc.Name = x+"_"+y;
                    //bc.BackgroundImage = PieceBmp;
                    //bc.Size = new Size(PieceSize,PieceSize);
                    bc.Click += PieceButton_Click;
                    Point docks = new Point(20, 20);
                    docks.Offset(ButtonControls.coordsX, ButtonControls.coordsY);
                    bc.Location = docks;
                    Controls.Add(bc);
                }
            }
        }

Используемый конструктор выглядит так:

        public ButtonControls (int X,int Y, int ButtonSize)
        {
            coordsX = X*ButtonSize;
            coordsY = Y*ButtonSize;
            Name = X+"."+Y;
            BackColor = Color.White;
            Size = new Size(ButtonSize,ButtonSize);

            Font = new Font("Arial",6);
            Text = coordsX + "." + coordsY;
        }

        public static int coordsX { get; set; }
        public static int coordsY { get; set; }

И событие щелчка вот так:

private void PieceButton_Click (object sender,EventArgs e)
        {
            MessageBox.Show(ButtonControls.coordsX+"/"+ButtonControls.coordsY);
        }

Как я могу сделать так, чтобы отображались координаты кнопки, на которую я нажал?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Приведите отправителя к BottonControls, чтобы нажать кнопку

Затем для доступа к вашей собственности coordsX , coordsY, необходимо удалить static ключевое слово

public int coordsX { get; set; }
public int coordsY { get; set; }

private void PieceButton_Click (object sender,EventArgs e)
{
     var button = (ButtonControls)sender;
     MessageBox.Show(button.coordsX+"/"+ button.coordsY);
}
0 голосов
/ 14 сентября 2018

Проблема в том, что ваши координаты static.

Удалить static т.е..

public int coordsX { get; set; }
public int coordsY { get; set; }

Затем используйте экземпляр sender, а не класс, чтобы получить доступ к этим свойствам в событии click.

private void PieceButton_Click (object sender,EventArgs e)
{
     var button = (ButtonControls)sender;
     MessageBox.Show(button.coordsX+"/"+ button.coordsY);
}

В качестве примечания, ваше имя класса ButtonControls не велико - почему оно во множественном числе? ButtonControl лучше, но все равно не описывает разницу с классом, от которого он наследуется ... PieceButton еще лучше (я не знаю контекст, так что это всего лишь предположение), но лично я бы просто назвал его Piece ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...