winforms 및 해당 컨트롤을 사용하여 abit을 재생하고 있으며 맞춤 버튼 클 릭을 수행하는 방법을 발견했습니다. 그러나 문제가 있습니다. 루프가있어 요소 목록을 반복하며 조건이 표시되면 gridview를 팝업하는 버튼을 만듭니다.오른쪽 버튼 클릭 이벤트 캡처
public void draw(ref Panel inputPanel) //draws the eventline
{
int stepCounter = 0;
for (int i = 0; i < DaysList.Count-1; i++)
{
Button b1;
if (DaysList[i].Elements.Count > max)
{
b1 = new Button(); //Create the box
b1.Width = 120;
b1.Height = 40; //Set width and height
b1.Location = new Point(stepCounter + 35, 70); //Location
inputPanel.Controls.Add(b1); //
b1.Text = "Check event date in grid";
b1.Show();
b1.BringToFront();
b1.Click += new EventHandler((sender, e) => btn_Click(sender, e, DaysList[i].Elements));
stepCounter += 200;
}
}
}
내 조건이 표시 될 때까지 버튼과 클릭 이벤트를 생성하는 것은 제 방법이었습니다. 이벤트 핸들러에 전달되는 기능은 다음과 같습니다 : 이벤트의
public void btn_Click(object sender, EventArgs e, List<EventElement> inputElems)
{
Button button = sender as Button;
DataGridForm window = new DataGridForm(inputElems);
window.Show();
}
public class EventElement
{
public EventElement()
{
}
public int Count{get;set;}
public string Date{get;set;}
}
clickpart 괜찮습니다하지만 난이 산란 버튼을 클릭 할 때마다, 나는있는 gridview에 잘못된 데이터를 얻을. 예 : : 루프는 나를 위해 4 개의 버튼을 만들었으며 폼에 직선으로 표시됩니다. 그러나 내가 버튼 중 하나를 클릭 할 때마다 - 그들 중 어느 것이 든, 버튼은 항상 마지막으로 생성 된 버튼의 데이터를 반환합니다. 더 명확한 예 :이처럼 보이는 우리가 목록 inputElems이 있다고 할 수 있습니다 :
inputElems [0] .Count -> 2644
inputElems [1] .Count -> 2131
inputElems [2] .Count -> 8467
inputElems [3] .Count -> 5462
이제 두 번째 버튼을 클릭하면 두 번째 버튼 매개 변수 목록의 입력 값이 (송신자, e, 2131)이어야합니다. 맞습니까? 하지만 두 번째로 생성 된 버튼을 호출하더라도 몇 가지 이유로 마지막 인수는 목록의 네 번째 요소와 동일하게됩니다.
버튼의 이벤트 핸들러에 항상 마지막으로 추가 된 button_click을 호출하는 것과 관련이 있다고 생각했습니다. 그렇다면 어떻게하면 EventHandler에서 다른 클릭을 호출 할 수 있습니까?
문제가 DataGridForm''에 대한'ctor'에 나에게 보인다, 그 코드는 어디에 있습니까? –
문제는 inputElems에서 DataGrid가 아니라 올바른 값을 얻지 못하는 것입니다. –
그리고 *** 정확히 *** 무엇을 의미합니까? 그것은 잘못된 가치입니까? 그렇다면 어떤 가치를 지니고 있는지, 어떤 가치를 기대하는지에 따라 질문을 편집하십시오. 그 종류의 정보가 실제로 문제를 해결하는 데 도움이 될 것입니다. –