Member 14630006 Ответов: 4

Как контролировать все метки и заставить каждую двигаться в одиночку


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

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

for (int i = 0; i <= 29; i++)
         {
     private void lbl(i)_MouseDown(object sender, MouseEventArgs e)
     {
         if (e.Button == System.Windows.Forms.MouseButtons.Left)
         {
             MouseDownLocation = e.Location;
         }
     }

     private void lbl(i)_MouseMove(object sender, MouseEventArgs e)
     {

             if (e.Button == System.Windows.Forms.MouseButtons.Left)
             {
                 lbl(i).Left = e.X + lbl(i).Left - MouseDownLocation.X;
                 lbl(i).Top = e.Y + lbl(i).Top - MouseDownLocation.Y;
             }
         }
     }

4 Ответов

Рейтинг:
2

RickZeeland

В дополнение к комментарию Ричардса см.: c# - Как написать общий ClickEvent для многих меток? - переполнение стека[^]


Рейтинг:
1

Richard MacCutchan

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


Member 14630006

у меня есть примерно 60 меток я хочу заставить каждую из них двигаться если я введу каждую метку в одиночку это будет намного проще кода

Рейтинг:
1

Dave Kreskowiak

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

Создайте свой собственный во время выполнения подвижных элементов управления Windows-форм [^]


Member 14630006

спасибо но вы пользуетесь vb.net мой проект-c#

Richard MacCutchan

Извини, я тоже. Я буду переписывать как C#.

Richard MacCutchan

Отличное предложение. И зачем чувствовать себя виноватым? Если у вас есть ответ на чью-то проблему, то вы полностью оправданы в продвижении своей собственной статьи.

Рейтинг:
0

Richard MacCutchan

Что-то вроде:

private void Label_Click(object sender, MouseEventArgs e)
{
    Label clickedLabel = (Label)sender;
    MessageBox.Show(clickedLabel.Text); // debug code
    int CurentX = clickedLabel.Left - 20; // move left 20
    int CurentY = clickedLabel.Top + 10;  // and down 10
    clickedLabel.Left = CurentX;
    clickedLabel.Top = CurentY;
}


То clickedLabel объект содержит текущее положение самой метки. Приведенный выше код перемещает его влево на 20 и вниз на 10, просто в качестве примера. Измените все вышесказанное, чтобы сделать все, что требуется от ваших меток.


Member 14630006

я хочу заставить все этикетки двигаться так , как будто я перетаскиваю их в любом месте панели, я могу сделать это на 1 этикетке или 2 этикетках, но теперь у меня есть 60 этикеток, это будет так здорово, если я сделаю код для каждой этикетки, есть ли короткий путь для этого, на C#