여기 내 문제를 나타내는 샘플 코드가 있습니다. 5 LinkLabel
을 추가합니다. 각각 Click
이벤트 핸들러가 있습니다. 라벨의 텍스트는 1 ... 5이며 동일한 결과가 표시되어야합니다. 각 라벨을 클릭하면 각각에 대해 동일한 메시지가 나타납니다. 5LinkLabel 클릭 이벤트가 루프 내에서 덮어 쓰여지고 있습니다.
마지막 핸들러가 덮어 쓰는 것과 같습니다 다른 라벨의 각 핸들러. 루프를 반복 할 때마다 새로운 EventHandler
과 LinkLabel
을 새로 작성하여 피할 수 있다고 생각했습니다.
각 LinkLabel
을 FlowLayoutPanel
에 더했습니다.
왜 이러한 결과가 발생하며 어떻게 해결할 수 있습니까? 당신이 당신의 코드를 설명하는 문제를 재현하는 내 시도에서
List<Test> objects = new List<Test>();
for (int i = 0; i < 5; i++)
{
objects.Add(new Test(i + 1));
}
foreach (Test t in objects)
{
LinkLabel label = new LinkLabel();
label.AutoSize = true;
label.Text = t.a + "";
label.Click += new EventHandler((sender, args) =>
{
MessageBox.Show(t.a + "");
});
flowLayoutPanel1.Controls.Add(label);
}
흠, 이상한데, 나는 여전히 같은 문제를 겪고 있습니다. 각 레이블을 클릭하면 "5"메시지가 전송됩니다. – kschieck
어떤 이유로 그것이 동일한 객체를 참조하고있었습니다. 그래서'string a = t.a + "";'와 같은 변수를 만들었다면 올바른 값을 가질 것입니다; – kschieck
@kschieck, 그 이유는 코드를 변경 (변경)하기 전의 코드 상태에 있기 때문입니다. 일단 솔루션을 분리하면 솔루션에 대한 설명을 게시해야합니다. 또한 유용하다고 판명되면 내 대답을 upvoting 고려해야합니다. :} – J0e3gan