2

ファイルを 1 行ずつ読み取り、文字列を tableLayoutPanel に入れるプログラムがありますが、tableLayoutPanel のラベルごとに eventHandler を作成するにはどうすればよいですか?

私が使用しているコードは次のとおりです。

Label label = new Label();
label.Name = "MyNewLabel";
label.ForeColor = Color.Red;
label.Text = line;
tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Controls.Add(label, 0, tableLayoutPanel1.RowCount + 1);

すべてのラベルは Web ページを開く必要があり、URL は独自のテキストである必要があります。

私はすでにこれを試しました:

foreach (Control x in panel1.Controls)
{
label.Click += HandleClick;
}

private void HandleClick(object sender, EventArgs e)
{
messageBox.Show("Hello World!");
}

うまくいきません。


新しい問題:

主な問題は Jay Walker によって解決されましたが、別の問題が発生しました。すべてのラベルが eventHandler で機能するわけではありません。メインコードは次のとおりです。

string line;
System.IO.StreamReader file = new System.IO.StreamReader("research.dat");
while ((line = file.ReadLine()) != null)
{
    Label label = new Label();
    label.Name = "MyNewLabel";
    label.ForeColor = Color.Red;
    label.Text = line;

    label.Click += HandleClick;

    tableLayoutPanel1.RowCount++;
    tableLayoutPanel1.RowStyles.Add(new RowStyle());
    tableLayoutPanel1.Controls.Add(label, 0, tableLayoutPanel1.RowCount + 1);
}

と組み合わせて:

    private void HandleClick(object sender, EventArgs e)
    {
        ((Control)sender).BackColor = Color.White;
    }

一部のラベルの背景は白に変わり、同じものは白に変わりません。

4

3 に答える 3

2

後でコントロールをループするのではなく、ラベルを作成するときにハンドラーを追加しないのはなぜですか (xおそらくlabel.

Label label = new Label();
label.Name = "MyNewLabel";
label.ForeColor = Color.Red;
label.Text = line;
// add the handler here
label.Click += HandleClick;
tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Controls.Add(label, 0, tableLayoutPanel1.RowCount + 1);
于 2013-03-03T16:37:11.617 に答える
0

する

label.Click += Eventhandler;

ラベルを作成した後

于 2013-03-03T16:36:56.190 に答える
0

本当に foreach ループで実行したい場合:

foreach (Control c in panel1.Controls) {
    if (c.Type ==  typeof(Label)) { //or something like that...
          c.Click += HandleClick;
    }
}
于 2013-03-03T16:41:48.727 に答える