3

次のように動的に作成されるラベルのグループのクリック イベントを作成しようとしています。

private void AddLBL_Btn_Click(object sender, EventArgs e)
    {
        int ListCount = listBox1.Items.Count;

        int lbl = 0;

        foreach (var listBoxItem in listBox1.Items)
        {
            Label LB = new Label();
            LB.Name = "Label" + listBoxItem.ToString();
            LB.Location = new Point(257, (51 * lbl) + 25);
            LB.Size = new Size(500, 13);
            LB.Text = listBoxItem.ToString();
            Controls.Add(LB);

            lbl++;
        }


       LB.Click += new EventHandler(PB_Click);// error here


    }

    protected void LB_Click(object sender, EventArgs e)
    {



        webBrowser1.Navigate("http://www.mysite/" + LB);//Navigate to site on label

    }

ループ内で LB を作成していて、ループ外で使用できるように LB を宣言する方法を知っているほど賢くないため、「名前 'LB' は現在のコンテキストに存在しません」というエラーが表示されます。

さらに、ラベル名 (listBoxItem) をクリック イベントに渡し、LB が WebBrowser 呼び出しのどこにあるかを示したいと思います。Like: webBrowser1.Navigate(" http://www.mysite/ " + LB);//ラベルのサイトに移動

4

1 に答える 1

9

オブジェクトLBは範囲外です。ループ内で移動する必要があります。(また、あなたが示したハンドラが呼び出されLB_Clickていますが、割り当てようとしていますPB_Click;それはタイプミスだったと思います)。

foreach (var listBoxItem in listBox1.Items)
{
    Label LB = new Label();
    LB.Name = "Label" + listBoxItem.ToString();
    LB.Location = new Point(257, (51 * lbl) + 25);
    LB.Size = new Size(500, 13);
    LB.Text = listBoxItem.ToString();
    LB.Click += new EventHandler(LB_Click); //assign click handler
    Controls.Add(LB);

    lbl++;
}

senderイベント ハンドラーのは、クリックされたラベルになります。

protected void LB_Click(object sender, EventArgs e)
{
    //attempt to cast the sender as a label
    Label lbl = sender as Label; 

    //if the cast was successful (i.e. not null), navigate to the site
    if(lbl != null)
        webBrowser1.Navigate("http://www.mysite/" + lbl.Text);
}
于 2013-07-31T20:13:19.497 に答える