Как реализовать свойство CanRaiseEvent в VB6? - PullRequest
1 голос
/ 02 июня 2019

Ссылка на свойство 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 (скажем, «test»), запускается другое событие, вызывая сложение состояния текущего события и вызывается событие изменения TextBox снова. Я могу помешать событию повторить код с помощью простого «Если» (например, если Text1.Text = «test», то Exit Sub). Это немедленно выйдет из второго события и вернется в состояние первого события, чтобы продолжить обработку. Однако я бы предпочел отключить событие TextBox при вводе исходного события. Может показаться, что свойство, указанное в ссылочной ссылке, выполнит это, но оно не распознается VB6.

Есть ли что-то, что мне нужно сначала объявить, чтобы использовать свойство "CanRaiseEvent" в VB6?

Спасибо X

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

Типичный способ сделать это с помощью переменной Static ... Boolean:

   Sub SomeEvent
     Static inHere As Boolean

     If inHere Then 
        Exit Sub
     Else
        inHere = True
     End If
        .....
     inHere = False
   End Sub
0 голосов
/ 04 июня 2019

Вы можете сделать это примерно так, но это может не стоить этого. (И, кстати, у меня на этом компьютере нет VE IDE VB6, так что это не будет проверено синтаксисом, но это поможет вам начать работу.

В вашей Форме (и для этого примера, скажем, текстовое поле, о котором вы заботитесь - 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. ты бы сделал это только так. (В противном случае будут вызваны оба обработчика событий)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...