2

比較ロジックのパラメーターとしてオブジェクトタイプを渡したいという状況があります。

例:

Sub Some (val as Control, typ as Type, ....)
   ...
   if typeof val is typ then
      ...
   end if
   ...
End Sub

私はこの論理パターンを複数の方法で実行していることに気付き、単純化するために、論理を複数のスポットではなく1つの場所に凝縮したいと考えています。

これはこのタイプの構造を検証する正しい方法ですか、それともそのようなことを行うためのより良い方法がありますか?

4

1 に答える 1

0

それほど時間はかかりませんでした

比較を抽象化して一般的なものにしたい場合は、これで正しいロジックが得られるはずです。

Public Sub CompareType(val as Control, typ as String)
   ...
   if TypeName(val) = typ then
      ...
   end if
   ...
End Sub

基本的にオブジェクト(val)を渡します。抽象化を一歩進めたい場合はバリアントにすることができ、そのタイプに対して返される文字列値がわかっている場合は、それを文字列値として渡します。

実例:

コード実行の場合:

...
AutoSizeControl CurrentDb, frm, "Textbox"
...

モジュール宣言:

Public Sub AutoSizeControl(ByRef db As Database, ByRef frm As Form, typ As String)
    Dim ctl As Control, i As Integer
    For i = 0 To (frm.Controls.Count - 1)
        Set ctl = frm.Controls(i)
        If TypeName(ctrl) = typ Then
            ctl.ColumnWidth = -2
        End If
    Next
End Sub

これがそのような抽象化を必要とするかもしれない他の誰かに役立つことを願っています。

于 2012-08-17T14:33:19.150 に答える