将两个相似的表单传递为相同的类型,并且仍然可以访问其对象

时间:2012-10-30 20:22:12

标签: vb.net winforms visual-studio parameters

我正在尝试将另一种形式实施为已经完成的例程。基本上所有的代码都存在,我需要做的就是以不同的方式操作数据。

我有一个例如这样的例行程序。 这是一个释义的例子:

Private Sub getReportValues(ByRef fr As frmCustomReport, ByRef ReportInfo As ReportValues)
            ReportInfo.eHeaderColor = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\FE Jupiter\MSSMonitor").GetValue("Report Equipment Header Color", "DCDCDC") 'Gainsboro
            ReportInfo.mHeaderColor = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\FE Jupiter\MSSMonitor").GetValue("Report Monitor Header Color", "FFF8DC")   'Cornsilk

fr.btnEquipColor.PickedColor = System.Drawing.ColorTranslator.FromHtml("#" & Microsoft.VisualBasic.Conversion.Hex("&HFF" & ReportInfo.eHeaderColor))

问题在于(fr为frmCustomReport),我想让它成为一个system.windows.forms.form但是我会失去使用它的对象的能力。我还应该提一下,fr是一个模态对话框,我不想要一个真正的hacky controlcollection来解决这个问题。有没有人对此有好的指导?

另请注意!!!我想要在两个表单上访问的控件几乎相同。唯一的不同是布局和一些附加功能。

1 个答案:

答案 0 :(得分:1)

如果没有更多信息,提供一个具体的例子有点困难。这将取决于您需要执行的交互量。创建一个接受Base Class作为参数的子例程,查看Name值,并使用CType将条件逻辑基于该类,以将Form强制转换为正确的类型。

Private Sub clickOtherFormsButton(Value As Form)

    If Value.Name = "Form3" Then
        Dim formObject As Form3 = CType(Value, Form3)
        formObject.Button1.PerformClick()
    ElseIf Value.Name = "Form2" Then
        Dim formObject As Form2 = CType(Value, Form2)
        formObject.Button1.PerformClick()
    End If

End Sub