使用 sender 判断 ListView 中按下了什么按钮

Using sender to determine what button is pressed in ListView

我有一个 ListView 有更新和取消按钮。这两个按钮都有一个 CommandName 取消,因此它们触发相同的 ListView 事件处理程序 (ListView_ItemCanceling)。

在这个事件句柄中,我执行了我的存储过程。我遇到的问题是因为两个按钮都会触发它们都更新的相同事件处理程序。即使没有进行任何更改。

我想尝试确定在事件处理程序开始时触发事件的按钮(可能使用发送器?),但我不知道该怎么做。

这是我目前在 ListView_ItemCancelling 事件处理程序中尝试做的事情:

Button newButton = (Button)sender;
if(newButton.Text == "Cancel")
{
     Console.Write("this worked");
}

当我执行这段代码时,我收到一条错误消息,告诉我无法将发件人对象从 ListView 对象转换为 Button 对象。

任何帮助将不胜感激!

sender 似乎是你的 ListView,而不是 Button。尝试使用 Button_OnClick 事件而不是 ListView_ItemCancelling.

或者尝试对 ListView_ItemCancelling 做一些研究,比如使用 ListViewCancelEventArgs e 参数,也许在这种情况下它可以帮助你。您可以阅读更多相关信息 on MSDN.

您可以为每个按钮定义命令名称以检测点击了哪个按钮,例如: 将第一个定义为 "Cancel1",将另一个定义为 "Cancel2" 在代码中你可以这样检查:

if(CommandName == "Cancel1")
{
// do some thing
}
else if(CommandName == "Cancel2")
{
// do other staff
}

或者如果两者都在做同样的工作但你需要确定发件人

if(CommandName == "Cancel1" || CommandName == "Cancel2")
{
// do some thing common
}

if(CommandName == "Cancel1")
{
// do some thing if button 1 clicked
}

if(CommandName == "Cancel2")
{
// do some thing if button 2 clicked
}

我在@paqogomez 的帮助下找到了答案。他建议我使用 ListViewItemCommand 事件处理程序来获取为列表视图单击的按钮。

ItemCommand 事件处理程序中,我检查了它们的命令参数,然后使用了适当的代码。

protected void LV_Tickets_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    if(e.CommandName == "Update")
    {
        //code here
    }
}