分享

Excel实战技巧10:在用户窗体中实时响应不同文本输入框的状态

 L罗乐 2018-03-03


有时候,我们需要接收到窗体中的事件,然后使用此事件作为触发器来改变其他的窗体控件。

 

下面,以文本框为例来介绍这个技巧。如下图1所示,用户窗体中有3个用于输入的文本框,最底部是一个名为Label1的标签,用来实时显示文本框中输入的文字数。

1

 

目的

当用户在任一文本框中输入文本时,底部的Label1标签中将实时显示该文本框中输入的文本长度以及文本内容。

 

程序代码

VBE中,插入一个名为clsDelegate的类模块,输入下面的代码:

PublicEvent txtBoxChanged(txtBox As MSForms.TextBox)

 

PublicSub PassControl(txtBox As MSForms.TextBox)

RaiseEventtxtBoxChanged(txtBox)

EndSub

 

接着插入一个名为clsEvents的类模块,输入下面的代码:

PublicWithEventstxtBox As MSForms.TextBox

Privatem_cDelegate As clsDelegate

 

PublicProperty Set cDelegate(value As clsDelegate)

    Set m_cDelegate = value

EndProperty

 

PrivateSub txtBox_Change()

m_cDelegate.PassControltxtBox

EndSub

 

在用户窗体的代码为:

PrivatecEvents As clsEvents

PublicWithEventscDelegateAsclsDelegate

PubliccollControls As Collection

 

PrivateSub UserForm_Activate()

    Dim ctl As MSForms.Control

 

    Set cDelegate = New clsDelegate

    Set collControls = New Collection

    ForEach ctl In Me.Controls

        If TypeOfctlIsMSForms.TextBox Then

            Set cEvents = New clsEvents

            Set cEvents.cDelegate = cDelegate

            Set cEvents.txtBox = ctl

            collControls.Add cEvents

        End If

    Next ctl

EndSub

 

PrivateSub cDelegate_txtBoxChanged(txtBox As MSForms.TextBox)

    Me.Label1.Caption = txtBox.Name& '文本长度是' _

     &Len(txtBox.Text)& '. 文本内容是: ' &txtBox.Text

EndSub

 

最终的结果

运行后的结果如图2所示。

2

 

小结

本示例展示了如何通过使用一个委托类将每一个WithEvents控件与RaiseEvent相连接并接收用户窗体中的事件的技巧。例如,本示例中修改任意一个文本框内容触发另一个窗体控件(标签控件)作出相应的变化。

 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多