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