Nano Hash - криптовалюты, майнинг, программирование

Запретить TreeView запускать события в VB6?

В некотором коде VB6 у меня есть обработчик для события Collapse TreeView:

Private Sub MyTree_Collapse(ByVal Node as MSComCtlLib.Node)

Это вызывается всякий раз, когда узел в дереве сворачивается пользователем или программно. Как оказалось, из-за некоторого обходного пути может случиться так, что этот обработчик скажет узлу свернуться, что приведет к бесконечной рекурсии.

Я могу придумать несколько способов снять шкуру с этой кошки, но мне кажется, что самым простым является указание TreeView не вызывать события в течение некоторого периода времени. Однако я не могу найти простой вызов, который позволил бы мне это сделать. Кто-нибудь успешно сделал это, или мне нужно отслеживать состояние каким-либо другим способом, чтобы я мог надлежащим образом реагировать на рекурсивные события?

18.08.2008

Ответы:


1

Я думаю, что, как и многие события в VB, его нельзя отключить.

Просто установите логический флаг, как вы предложили.

19.08.2008

2

@Phil - я пришел к такому же выводу. Моя реализация MyTree_Collapse теперь выглядит примерно так (где m_bHandlingCallback - переменная-член):

Private Sub MyTree_Collapse(ByVal Node as MSComCtlLib.Node)
    If m_bHandlingCallback Then Exit Sub

    m_bHandlingCallback = True
    DoSomeStuff
    m_bHandlingCallback = False
End Sub
19.08.2008

3

Другой способ в VB6 - иметь альтернативную WithEvents ссылку на элемент управления:

Private WithEvents alt as TreeView

и в Form_Load:

Private Sub Form_Load()
Set alt = MyTree
End Sub

Теперь alt будет получать множество таких событий:

Private Sub alt_Collapse(ByVal Node as MSComCtlLib.Node)
Set alt = Nothing
'DoSomeStuff'
Set alt = MyTree
End Sub

Но во время DoSomeStuff события отключаются, что также относится ко всем другим событиям Sub для alt без необходимости внесения в них навязчивых изменений.

28.11.2009

4

Я бы объявил переменную flag как STATIC в Sub. Это позволяет избежать глобализации переменной и сохранять ее значение между вызовами.

29.09.2008
  • Является ли статическая переменная функции в VB общей для всех экземпляров класса, как в C ++? Я использовал данные членов (а не глобальные данные), чтобы установка флага не повлияла на все экземпляры моего класса - только на тот, который меня заботил. 29.09.2008
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..