我的应用程序有一个包含4个选项卡的表单,每个选项卡中都有一个DataGridView(DGV)。标签之外还有一个控件面板,用于所有DGV控件。
我需要确保代码根据用户的观察来更新正确的DGV。目前,对于需要在DGV上进行某些工作的任何事件或功能,我都会这样做:
Dim dgv As DataGridView = GetCurrentDGV(TabControl.SelectedTab)
For Each row As DataGridViewRow In dgv.SelectedRows
'Do work on row
Next
这是函数GetCurrentDGV()
:
Private Function GetCurrentDGV(ByRef tab As TabPage) As DataGridView
For Each control As Control In tab.Controls
If control.GetType Is GetType(DataGridView) Then
Return CType(control, DataGridView)
End If
Next
End Function
我对此有很多不满意的地方。
首先,它很慢。我不确定为什么每个选项卡仅包含一个DGV,而没有其他内容(因此,通过控件的循环只是一个项目,应该在第一个循环中返回)。
第二,我的函数有可能不返回任何将提供空引用的内容。
我正在尝试避免对制表符和DGV之间的关系进行硬编码,但是在我走这条路线之前,有没有更好的方法可以做到这一点?