Как добавить определенные события для вновь назначенных элементов управления в массиве [c #] - PullRequest
0 голосов
/ 18 октября 2010

В основном я хочу назначить события некоторым элементам управления, которые создаются. Я хочу обновить метки, связанные с каждым трекбаром, когда каждый трекбар изменяется (меняйте label1 [i] и label2 [i] при изменении трекбара [i]). Я пробежался по гуглу и обнаружил, что это возможно сделать с помощью делегатов. У меня был взрыв, используя лямбда-выражения, но теперь я понимаю, что это только для анонимных событий?

Пожалуйста, кто-нибудь может подтолкнуть меня в правильном направлении?

            // assign control Arrays
           TrackBar[] criteriatbs = new TrackBar[numberofsliders];
           TextBox[] criteriatextbs = new TextBox[numberofsliders];
           Label[] criterialabel1 = new Label[numberofsliders];
           Label[] criterialabel2 = new Label[numberofsliders];
           Label[] criterialabel3 = new Label[numberofsliders];
           Label[] criterialabel4 = new Label[numberofsliders];

                for (int i = 0; i < numberofsliders; i++)
            {

                // Add Labels1
                Label label1x = new Label();
                label1x.Location = new Point(40, 135 + (i * 200));
                label1x.Size = new Size(250, 15);
                label1x.TextAlign = ContentAlignment.MiddleCenter;
                label1x.Text = "Test";
                label1x.ForeColor = Color.Black;

                criterialabel1[i] = label1x;
                Controls.Add(criterialabel1[i]);


                // Add Labels2
                Label label2x = new Label();
                label2x.Location = new Point(448, 135 + (i * 200));
                label2x.Size = new Size(250, 15);
                label2x.TextAlign = ContentAlignment.MiddleCenter;
                label2x.Text = "Test";
                label2x.ForeColor = Color.Black;

                criterialabel2[i] = label2x;
                Controls.Add(criterialabel2[i]);


                // Add Labels3
                Label label3x = new Label();
                label3x.Location = new Point(40, 195 + (i * 200));
                label3x.Size = new Size(250, 15);
                label3x.TextAlign = ContentAlignment.MiddleCenter;
                label3x.Text = "Equal";
                label3x.ForeColor = Color.DimGray;

                criterialabel3[i] = label3x;
                Controls.Add(criterialabel3[i]);


                // Add Labels4
                Label label4x = new Label();
                label4x.Location = new Point(448, 195 + (i * 200));
                label4x.Size = new Size(250, 15);
                label4x.TextAlign = ContentAlignment.MiddleCenter;
                label4x.Text = "Equal";
                label4x.ForeColor = Color.DimGray;

                criterialabel4[i] = label4x;
                Controls.Add(criterialabel4[i]);


            // Add TrackBars
                TrackBar tbx = new TrackBar();
                tbx.Location = new Point(28, 150 + (i * 200));
                tbx.Size = new Size(686, 45);
                tbx.Minimum = 0;
                tbx.Maximum = 16;
                tbx.SmallChange = 1;
                tbx.LargeChange = 2;
                tbx.Value = 8;

                // use lambda expressions to enable events for each trackbar???
                tbx.Scroll += new EventHandler(delegate (Object o, EventArgs a) {

                    int trackbarnumber = i;
                    MessageBox.Show("worked " + trackbarnumber);




                                                                                });


                criteriatbs[i] = tbx;
                Controls.Add(criteriatbs[i]);


            }

Заранее большое спасибо за любую помощь, которую вы можете оказать!

1 Ответ

1 голос
/ 18 октября 2010

Вы можете использовать лямбда-выражение или анонимный метод.Например:

tbx.Scroll += (o, a) => {
  label1x.Text = tbx.Value.ToString();
};

Вы не столкнетесь с общими проблемами анонимных функций, если не перехватите саму переменную цикла или не объявите переменные (tbx, label1x и т. Д.) Вне цикла.

...