0

すでに完成したルーチンに別のフォームを実装しようとしています。基本的にすべてのコードがそこにあり、私がする必要があるのは、別の方法でデータを操作することだけです。

たとえば、このようなルーチンがあります。これは言い換えの例です:

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 as frmCustomReport) にあり、それを system.windows.forms.form にしたいのですが、そのオブジェクトを使用できなくなります。また、fr はモーダル ダイアログであり、このために非常にハックな controlcollection を回避したくないことにも言及する必要があります。誰もこれについて良い方向性を持っていますか?

また注意してください!!! 両方のフォームでアクセスしたいコントロールはほとんど同じです。唯一の違いは、レイアウトといくつかの追加機能です。

4

1 に答える 1

1

もう少し情報がないと、具体的な例を挙げるのは少し難しいです。これは、必要な対話の量に応じて機能します。基本クラスを引数として受け入れるサブルーチンを作成し、名前の値を見て、CType を使用してフォームを適切な型にキャストする条件ロジックを基にします。

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
于 2012-10-31T00:54:02.233 に答える