我正在玩winform及其控件,只是发现如何做custommade buttonclicks。但是,有一个问题。我有一个循环,循环遍历元素列表,如果出现一个条件 - 我创建一个按钮,将弹出一个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控件。作为示例:该循环为我创建了四个按钮,并且它们呈现在表单上的一条直线上。但是每当我点击其中一个按钮时 - dosnt就会关注其中的哪一个按钮,该按钮总是会返回最后一个产生的按钮的数据。更明显的例子:假设我们已经列表inputElems看起来是这样的:
inputElems [0] .Count之间 - > 2644
inputElems [1] .Count之间 - > 2131
inputElems [2] .Count之间 - > 8467
inputElems [3] .Count - > 5462
当我现在单击第二个按钮时,第二个按钮参数列表的输入应该具有值(sender,e,2131),对不对?但由于某种原因,最后一个参数与列表中的第4个元素相同,即使我调用第二个创建的按钮。
我觉得它跟我总是调用最后一个添加的button_click到按钮的事件处理程序,如果是的话,我怎样从EventHandler调用不同的点击?
在我看来,这个问题是在'ctor'为'DataGridForm',代码在哪里? –
问题出在inputElems没有得到正确的值,而不是在datagrid中 –
这是什么***你的意思是?这是错误的价值吗?如果是这样,编辑你的问题,你得到什么价值与你期望的价值。看,那种信息对帮助解决问题实际上是有用的。 –