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

1

Im пытается создать событие с различным индексом для динамически созданного GroupBox. С моим фактическим кодовым событием для каждого группового ящика это то же самое. Как я могу сделать событие с различным индексом для каждого группового поля? Мой код:

public void LoadGry()
        {

           // GroupBox groupbox = new GroupBox();
            Label nazwagry = new Label();
            for(int i = 0; i < myCollection.Count; i++)
            {
                GroupBox groupbox = new GroupBox();
                groupbox.Text = myCollection[i];
                groupbox.Size = new Size(290, 131);
                groupbox.Location = new Point(6, 150 * (myCollection.Count - i - 1));
                groupbox.ForeColor = Color.White;
                Label label1 = new Label();
                label1.Text = groupbox.Text;
                label1.AutoSize = true;
                label1.Location = new Point(groupbox.Location.X + 80, groupbox.Location.Y + 20);
                groupbox.Controls.Add(label1);
                Gry.Controls.Add(label1);

                PictureBox picturebox = new PictureBox();
                picturebox.Location = new Point(groupbox.Location.X + 5, groupbox.Location.Y + 20);
                picturebox.Size = new Size(75, 75);
                picturebox.SizeMode = PictureBoxSizeMode.StretchImage;
                picturebox.LoadAsync(myCollection3[i]);
                groupbox.Click += new EventHandler(delegate {groupboxclick(groupbox, picturebox, i);});
                Label label2 = new Label();
                label2.Text = "Status: " + "Aktualny";
                label2.ForeColor = Color.Green;
                label2.AutoSize = true;
                label2.Location = new Point(label1.Location.X, label1.Location.Y + 20);
                Gry.Controls.Add(label2);
                Label zapiszopis = new Label();
                zapiszopis.Text = myCollection4[i];
                zapiszopis.Visible = false;

                Gry.Controls.Add((Control)groupbox);    

                //MessageBox.Show("pokaz mi wysokosc");
                }
            }
private void groupboxclick(GroupBox groupbox, PictureBox picturebox, int itest)
        {


            groupbox.ForeColor = Color.Aqua;
            this.pictureBox1.BackgroundImage = picturebox.BackgroundImage;
            opishacka.Text = myCollection4[itest];
        }
  • 0
    Почему вам нужны разные обработчики? Разве вы не можете просто предоставить атрибут отправителя этому обработчику событий, чтобы вы могли легко получить GroupBox, который вызвал событие?
Теги:

1 ответ

1
Лучший ответ

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

НО Вы можете легко сделать то, что хотите, используя следующие свойства для привязки значений к элементам управления.

1-) Тег в WinForms & WPF:

// Setup
pictureBox.Tag = i;

// Event
int i = (int) pictureBox.Tag;

2-) ViewState в WebForms

// Setup
ViewState[pictureBox.UniqueID] = i;

// Event
int i = (int) ViewState[pictureBox.UniqueID];

Вы можете использовать многие другие методы. Я отправляю только один для каждой популярной структуры. Я гость, что вы в проекте WinFors.

Надеюсь, это поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню