0

Click eventにあるすべてのラベルの を作成するこの関数がありlabel listます。label listラベルのリストです:

Label[] label = new Label[50]; // 50 is only a ramdom number, is not the real number of number of labels

iinumber of labelsからですlabel

orar[k]いくつかのフィールドを含むリストです:

static List<Orar> orar = new List<Orar>();

Orarリストのクラスです。iiリストには、 (ラベルの数)と同じ数のフィールドがあります。

Clickこれは、イベントを作成するためのコードです。

for (int k = 0; k < ii; k++)
            {
                label[k].Click += (s, e) =>
                {
                    string materie = "", profesor = "", detali = "", zi = "", formatmaterie = "", sala = "", inputbox = "", inceputora = "", formatOra = "", saptamana = "", AMPM1 = "", p1 = "";
                    int cand = 1, vl1 = 0, apm = 0;

                    materie = orar[k].materie;
                    profesor = orar[k].profesor;
                    detali = orar[k].detali;
                    zi = orar[k].zi;
                    formatmaterie = orar[k].formatmaterie;
                    sala = orar[k].sala;
                    inceputora = orar[k].inceputora;
                    formatOra = orar[k].formatora.ToString();
                    saptamana = orar[k].saptamana;
                    AMPM1 = orar[k].apm;

                    vl1 = vl11;
                    cand = 1;

                    p1 = "Detali materie !";
                    apm = 0;

                    inputbox = Programarii.InputAddOrar.Show(p1, ref materie, ref formatOra, ref sala, ref inceputora, ref formatmaterie, ref profesor, ref zi, ref detali, ref saptamana, ref vl1, ref cand, ref apm, ref AMPM1).ToString();
                };
            }

問題は、機能しないことです。次のエラーがあります: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

4

2 に答える 2

1

私の推測では、List の orar 要素にメモリを割り当てる必要があります。

そう:

orar.Add( new Orar()); 

次に、あなたのことをしてください:

orar[i].someProperty = "SetProperty";

編集: キャプチャされた変数が原因である可能性があります。私のために何かを試して、代わりにこれをしてください:

for (int k = 0; k < ii; k++)
            {
                int j = k ; //replace the k's in the lambdas with j  
                label[k].Click += (s, e) =>
                {
                    string materie = "", profesor = "", detali = "", zi = "", formatmaterie = "", sala = "", inputbox = "", inceputora = "", formatOra = "", saptamana = "", AMPM1 = "", p1 = "";
                    int cand = 1, vl1 = 0, apm = 0;

                    materie = orar[j].materie;
                    profesor = orar[j].profesor;
                    detali = orar[j].detali;
                    zi = orar[j].zi;  
                    formatmaterie = orar[j].formatmaterie;
                    sala = orar[j].sala;
                    inceputora = orar[j].inceputora;
                    formatOra = orar[j].formatora.ToString();
                    saptamana = orar[j].saptamana;
                    AMPM1 = orar[j].apm;

                    vl1 = vl11;
                    cand = 1;

                    p1 = "Detali materie !";
                    apm = 0;

                    inputbox = Programarii.InputAddOrar.Show(p1, ref materie, ref formatOra, ref sala, ref inceputora, ref formatmaterie, ref profesor, ref zi, ref detali, ref saptamana, ref vl1, ref cand, ref apm, ref AMPM1).ToString();
                };
            }
于 2012-10-07T14:18:05.190 に答える
0

ii = 50変更する場合k < ii - 1

于 2012-10-07T14:19:05.977 に答える