vb.net - 如何调用从 mdiparent 调用 mdichildB 方法的 mdichildA 方法
问题描述
我有一个 MDIParent 表单,其中包含工具栏中的上一个和下一个按钮。MDIChildA 包含一个 DataGridView,而 MDIChildB 或 MDIChildC 窗体根据行类型显示选定行的属性。所有 MDI 子窗体都显示为 DocStyle.Fill。
目标是让上一个和下一个按钮调用 MDIChildA 中的方法,并让 MDIChildA 根据行类型为下一个 DataGridView 行刷新 MDIChildB 或 MDIChildC。
当 DataGridView 中包含第二种类型的项目时,最近引入了 MDIChildC 表单。当只有一种行类型时,上一个和下一个功能正在工作。以下是 next 的编码方式:
在 MDIParent 中:
Private Delegate Sub InvokePrevNext()
Private Sub tsbNext_Click(sender As Object, e As EventArgs) Handles tsbNext.Click
Try
If Not ActiveMdiChild Is Nothing Then
Dim frm As Object
frm = Me.ActiveMdiChild
Dim dlg As InvokePrevNext = AddressOf frm.MoveNext
dlg.Invoke()
End If
Catch ex As Exception
' ignore exceptions
End Try
End Sub
在 MDIChildB 中:
Public Sub MoveNext()
Call psMovePreviousNext(pMDIChildA.NextRowPrimaryKey)
End Sub
(最初调用 MDIChildB 时,它接收 MDIChildA ByRef 并保存其指针。)
既然存在 MDIChildC 表单,我需要重新定向控制,以便 MDIChildA 通过确定下一个行类型并刷新适当的子项来处理下一个请求。在我看来,我不能再使用 ActiveMDIChild 方法。
任何人都可以提出一种方法吗?
解决方案
由于 MDIChildA 具有特定用途(显示网格)并为其他表单(MDIChildB 或 MDIChildC)提供信息,因此您可以只保留对 MDIParent 中 MDIFormA 实例的引用(私有 childA AS MDIChildA)。然后在tsbNext_Click
你可以调用childA
(MDIChildA 的实例)上的公共函数,以返回选定的行信息,随后可以将其传递给 MDIChildB 或 MDIChildC 等。
在 MDIParent 中:
Private childA As MDIChildA 'assigned when MDIChildA is loaded/shown
Private childB As MDIChildB 'assigned when MDIChildB is loaded/shown
Private childC As MDIChildC 'assigned when MDIChildC is loaded/shown
Private Sub tsbNext_Click(sender As Object, e As EventArgs) Handles tsbNext.Click
Try
If childA IsNot Nothing Then
Dim nextRow = childA.GetNextRow()
If nextRow = [you know what goes here, I dont] Then
childB.FillData(nextRow)
Else
childC.FillData(nextRow)
End If
End If
Catch ex As Exception
' Ignoring exceptions is not recommended
' because it makes it hard to support your app
' You are better-off logging it. Check out Log4Net
End Try
End Sub
在 MDIChildA 中:
Public Function GetNextRow() As String 'or DataRow or enum or something
'code to pick the next row
return me.NextRowPrimaryKey
End Sub
在 MDIChildB 或 MDIChildC 中:
Public Sub MoveNext(nextRow As String) 'or Long or DataRow, etc.
'code for processing the nextrow
End Sub
推荐阅读
- android - 在 Android 中保存文件时如何更改 FileOutputStream 目录?
- javascript - 如何使用 jquery 步骤进行验证,如果无效则停止步骤
- html - Confluence 中的自定义 Css 类
- sql-server - 如何将 T-SQL CTE 查询中的唯一标识符 ID 组合成字符串
- python - 在 Python 中使用 Pandas 使用其 URL 导入 CSV 文件
- c# - 如何将循环文本框传递给 ASP.NET MVC 中的控制器变量
- python - 'Builtin_function_or_method' 对象不可下标。使用 NumPy 时出错
- visual-studio-code - Visual Studio Code - 从 NPM 脚本资源管理器中排除子目录
- angular - Angular http 请求在 Chrome 中正确返回 Observable 数组,但在 Internet Explorer 中为空数组
- python - 为什么 sklearn OneHotEncoder 不能与单个数据框列一起使用?