0

多くの同一のオブジェクトを含む、同様に構築されたユーザーフォームがたくさんあります。私のラベル (50 を超える数) については、dblClick イベントを作成して、ユーザーがキャプションを変更できるようにしました。これは問題なく動作していますが、コードを改善する方法があるかどうか疑問に思っています。

異なるオブジェクトで同じイベントを処理するためだけに、同じコードのコピーを何十回も作成しないようにする方法はありますか?

これが私のコードです:

Private Sub Item1_Label_dblClick(ByVal Cancel as MSForms.ReturnBoolean)
    Item1_Label.Caption = InputBox("blah?", "blah", Item1_Label.Caption)
        if Item1_Label.Caption = "" Then Item1_Label.Caption = "Item 1"
End Sub

Private Sub Item2_Label_dblClick(ByVal Cancel as MSForms.ReturnBoolean)
    Item2_Label.Caption = InputBox("blah?", "blah", Item2_Label.Caption)
        if Item2_Label.Caption = "" Then Item2_Label.Caption = "Item 2"
End Sub

Private Sub Item3_Label_dblClick(ByVal Cancel as MSForms.ReturnBoolean)
    Item3_Label.Caption = InputBox("blah?", "blah", Item3_Label.Caption)
        if Item3_Label.Caption = "" Then Item3_Label.Caption = "Item 3"
End Sub

'etcetera etcetera

ユーザーフォームには、これらのクローンコード行が 50 行以上あります。もっと良い方法があると思いますが、Class EventHandler を使って調べたところ、自分の目的に適用する方法がわかりませんでした。

この繰り返しコードを防ぐ方法はありますか?

ありがとう、

エリアス

4

1 に答える 1

2
'clsLabel
Public WithEvents oLabel As MSForms.Label

Public Sub oLabel_dblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox oLabel.Caption
End Sub



'form code
Private colLabels As Collection

Private Sub UserForm_Initialize()
Dim o As Control, l As clsLabel
Set colLabels = New Collection
For Each o In Me.Controls
    If TypeName(o) = "Label" Then
        Set l = New clsLabel
        Set l.oLabel = o
        colLabels.Add l
    End If
Next o
End Sub
于 2013-07-19T23:06:12.037 に答える