1

Тема: C# передача в подію поточного індексу list<>

Створив клас для певних даних:

namespace Circle_Detect
{
    class measureData
    {
        public float    D;
        public float    F;
        public float    K;
        public int Q;

        public measureData(float d, float f)
        {
            D = d;
            F = f;

            K = f / (float) (Math.Pow(d, 2));

            if (d == 10)
            { Q = 20; }
            else if (d == 5)
            { Q = 10; }
            else if (d == 2.5f)
            { Q = 5; }
            else if (d == 2)
            { Q = 4; }
            else if (d == 1)
            { Q = 5; } 
        }
    }
}

Далі оголосив список об'єктів:

List<measureData> listMD = new List<measureData>();

Далі додав об'єктів до списку з даними:

listMD.Add(new measureData(10, 3000));
listMD.Add(new measureData(5, 1000));
listMD.Add(new measureData(3, 500));
listMD.Add(new measureData(2, 100));
listMD.Add(new measureData(1, 50));

Далі сформував пункти меню зі списку і обробники подій в циклі:

foreach (measureData menuData in listMD)
            {
                string strMenu = String.Format("{0}, {1} ", menuData.D, menuData.F);
                ToolStripMenuItem newItem = new ToolStripMenuItem(strMenu) { CheckOnClick = true, Checked = false };
                newItem.Click += newItem_Click;
                listMDMenu.DropDownItems.Add(newItem);
            }

Далі хочу в обробнику подій побачити всі данні з класу measureData з індексом списку listMD, що б індекс списку відповідав індексу меню який викликав подію. Зараз там стоїть індекс нуль, просто так для прикладу.

void newItem_Click(object sender, EventArgs e)
        {
            string strMsg = String.Format("{0}, {1}, {2}, {3}",listMD[0].D , listMD[0].F, listMD[0].K, listMD[0].Q);
            MessageBox.Show(strMsg);
        }        

Як бути?

2

Re: C# передача в подію поточного індексу list<>

Вирішив так, хоч і не знаю чи "грамотно" це:

void newItem_Click(object sender, EventArgs e)
        {

            int indexMenu = 0;

            for (int i = 0; i < listMDMenu.DropDownItems.Count; i++)
            {
                if (listMDMenu.DropDownItems[i].Pressed)
                {
                    indexMenu = i;
                }
            }
            string strMsg = String.Format("{0}, {1}, {2}, {3}", listMD[indexMenu].D, listMD[indexMenu].F, listMD[indexMenu].K, listMD[indexMenu].Q);
            MessageBox.Show(strMsg);
        }