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

时间:2019-03-26 13:00:15

标签: c# winforms events

我制作了多个具有上述实例的动态datagridviews。 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'。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

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

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;
          }
        }
     }
}