如何在VB6中实现“ CanRaiseEvent”属性?

时间:2019-06-02 12:49:32

标签: vb6

到“ CanRaiseEvent”属性的引用链接:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.canraiseevents?view=netframework-4.8#System_Windows_Forms_Control_CanRaiseEvents

鉴于VB6中的事件是递归的,所以我想在事件处理程序子菜单中禁用给定的控件事件。

例如,当前,如果在TextBox更改事件中TextBox的内容被更改(例如,测试),则将触发另一个事件,导致当前事件的状态被堆叠,并且TextBox更改事件将被调用再次。我可以防止事件使用简单的“ If”重复代码(例如,如果Text1.Text =“ test”然后退出Sub)。这将立即退出第二个事件并返回第一个事件的状态以继续处理。但是,我希望在输入初始事件时禁用TextBox事件。看来,参考链接中引用的属性可以完成此操作,但是VB6无法识别它。

使用VB6中的“ CanRaiseEvent”属性是否需要先声明?

感谢X

2 个答案:

答案 0 :(得分:2)

完成此操作的典型方法是使用height:100vh变量:

Static ... Boolean

答案 1 :(得分:0)

您可以像这样进行操作,但是这样做可能不值得。 (顺便说一下,我在这台PC上没有VB6 IDE,因此将取消语法检查,但这应该可以让您入门。

在表单中(对于本示例,您要关心的文本框是txtFirstName):

Private WithEvents mFirstNameEventListener As Textbox

Private Sub mFirstNameEventListener_TextChanged() 'or whatever the event is called in VB6
   DisableEvents

   'do work here, like forcing to upper-case etc

   EnableEvents
End Sub

Sub Form_Load()
   EnableEvents
End Sub

Sub Form_Unload()
   DisableEvents
End Sub


Private Sub EnableEvents()
   Set mFirstNameEventListener = txtFirstName
End Sub

Private Sub DisableEvents()
   Set mFirstNameEventListener = Nothing
End Sub

还请注意,您也不会使用标准的VB6存根事件处理程序。你只会这样做。 (否则,两个事件处理程序都会被调用)