C# 如何修复C中的“无法将Button类型的对象强制转换为DataGridView”错误

C# 如何修复C中的“无法将Button类型的对象强制转换为DataGridView”错误,c#,winforms,events,C#,Winforms,Events,我创建了多个具有上述实例的动态DataGridView。dgv在我的flowlayoutpanel中,我还为每个datagridview创建了CellClick事件 for (int = 0; i <= 5; i++){ dgv = new DataGridView(); dgv.Name = "dgv" + i; dgv.CellClick += new DataGridViewCellEventHandler(dgv_CellClick); } 这是我为

我创建了多个具有上述实例的动态DataGridView。dgv在我的flowlayoutpanel中,我还为每个datagridview创建了CellClick事件

for (int = 0; i <= 5; i++){
     dgv = new DataGridView();
     dgv.Name = "dgv" + i;
     dgv.CellClick += new DataGridViewCellEventHandler(dgv_CellClick);
}
这是我为dgv举办的活动

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e){
     DataGridView dgv = (DataGridView)sender;
     for (int i = 1; i <= 5; i++){
          if (dgv.Name == ("dgv" + i.ToString())){
               dgv.Rows[0].Cells[0].BackColor = Color.Red;
          }
     }
}

如您所见,我使用对象发送器跟踪我先前创建的dgv。现在,我想实现这个事件来与特定的datagridview联系,并使用不同的控件更改它的颜色。但当我使用它时,它崩溃并出错InvalidCastException“无法将“control here”类型的对象强制转换为“DataGridView”。有人能帮我吗?

为了安全起见,我建议您将事件处理程序代码包含在条件检查中,如下所示。它至少允许您放置一个断点,并检查哪个控件正在引发单击处理程序,以便您可以进行必要的更改。 虽然这不一定能解决您的问题,但至少可以帮助您在不立即导致应用程序崩溃的情况下进行调试

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{
     if(sender is DataGridView)
     {
        DataGridView dgv = (DataGridView)sender;
        for (int i = 1; i <= 5; i++){
          if (dgv.Name == ("dgv" + i.ToString())){
               dgv.Rows[0].Cells[0].BackColor = Color.Red;
          }
        }
     }
}

不,但事实并非如此。我有两组DataGridView,当我单击第一个dgv时,必须在第一个dgv中也单击第二组。当您获得异常时,请单击“复制详细信息”并将详细信息粘贴到您的问题中。这样,我们可以帮助您从堆栈跟踪中找到错误源。是否总是发生这种情况?或者仅当您单击的单元格内有一个按钮时?您应该显示按钮是如何在该单元格内结束的。DGV按钮列将发件人设置为所有者DGV,而不是按钮类型。如果发件人是DataGridView DGV,则可以将其缩短为。然后可以跳过DataGridView dgv=DataGridViewsender;。不过,这只适用于C7+