0

現在、ラベルの配列に特定のアクションを追加しようとしていますが、変数は{}.

_arr[i].Click += (a, b) => {  
     z++;

     numarfinal = Convert.ToString(z);
     MessageBox.Show(Convert.ToString(numarfinal));
};

外部で{}は、変数znumarfinal変更もされていませんがMessageBox.Show、パラメータが変更されたと報告されています。

関数全体は次のとおりです。

Label[] _arr = new Label[20];
Label[] _dinamic = new Label[20];
private static Random _r = new Random();
string numarfinal ;

private void button1_Click(object sender, EventArgs e)
{
    int z=0;
    int limita = Convert.ToInt16(textBox1.Text);
    limita = int.Parse(textBox1.Text);

    if (limita > 20)
        textBox1.Text = "Do sth";

    int randomnumber = _r.Next(20);


    for(int i=0;i<limita;i++)
    {
        do
        {
                randomnumber = _r.Next(20);
        } while (randomnumber==0);

        _arr[i] = new Label();

        _arr[i].Click += (a, b) =>
        {                                   
            z++;
            numarfinal= Convert.ToString(z);                                  
            MessageBox.Show(Convert.ToString(numarfinal));                            
        };

    _arr[i ].Text = Convert.ToString(randomnumber);
    _arr[i ].Size = new Size(50,50);
    _arr[i ].Location = new Point(55*i,60);
            testlabel.Text = Convert.ToString(numarfinal); // the label value remain nothing  (numarfinal's initial value)


    this.Controls.Add(_arr[i]);
}
4

3 に答える 3

1

問題は、 の値がまだ nulltestlabel.Textである間に一度設定することです。numarfinalいずれかのラベルがクリックされ、そのイベント ハンドラーが実行されると、 の値numarfinalは変更されますが、の値は変更されtestlabel.Textません。

testlabel.Textこれを修正する 1 つの方法は、イベント ハンドラー ラムダで単純に設定することです。

_arr[i].Click += (a, b) =>
{
    z++;
    numarfinal = Convert.ToString(z);
    testlabel.Text = numarfinal;
    MessageBox.Show(Convert.ToString(numarfinal));
};
于 2013-04-27T20:36:22.877 に答える
0

button1 をクリックしても、デリゲートをそこにアタッチnumarfinal = Convert.ToString(z);しているだけなので、行に到達することはありません。でデリゲートを割り当てると、それぞれのイベントが実際に発生する (つまり、それぞれのラベルをクリックする) まで、内のコードは呼び出されません。(a, b) => {...}{}

于 2013-04-27T20:33:11.253 に答える
0

ラベルのクリック イベントで z 値が変更されています。テストラベルの変更を確認したい場合は、「クリックイベントで」そのテキストを変更する必要があります。ラベルを追加するたびに numarfinal を変更したい場合は、コードをクリック イベントから除外する必要があります。また、ラベルをクリックするたびに numarfinal を変更したい場合は、コードが既にあるはずです。

于 2013-04-27T20:16:19.820 に答える