В настоящее время я пытаюсь использовать перечисление битового флага в проекте VB6 / COM.Тем не менее, при попытке прочитать значения из перечисления, я получаю противоречивые результаты.
Вот определение перечисления:
Enum Fruits
None = 0
Apple = 1
Strawberry = 2
Lemon = 4
End Enum
У меня есть объект, который предоставляет свойство типа Fruits
Public Get AvailableFruits as Fruits
Код, который должен быть в состоянии прочитать значение, используется, чтобы показать / скрыть метку в зависимости от значений каждого бита перечисления:
lblAppleAvailable.Visible = basket.AvailableFruits And Fruits.Apple
Когда этот код выполняетсяи у меня есть basket.AvailableFruits = 0
, в результате я получаю True.
Любая идея о том, что может вызвать такое поведение?
Редактировать:
Я пробовал с различными значениямиперечисление:
basket.AvailableFruits = 0
basket.AvailableFruits And Apple // Returns True
basket.AvailableFruits And Strawberry // Returns True
basket.AvailableFruits And Lemon // Returns False
В качестве побочного узла при отладке кода, если я помещаю выражение в выражение наблюдения, я получаю правильное значение;но когда выражение вычисляется в моем коде, оно все равно возвращает True.
Я попытался использовать другой синтаксис проверки:
(basket.AvailableFruits And Fruits.Apple) = Fruits.Apple
Все еще получая True, когда basket.AvailableFruits = 0
: - (
Решение
После тестирования различных решений я смог сузить проблему до компонента COM. В исходном кодере этого компонента указатель был установлен на 0 вместовозвращая 0 в качестве значения, которое вызвало проблему при попытке прочитать значение.
Я выбрал ответ FlipScript из-за вспомогательной функции, которая кажется хорошим советом для улучшения читабельности кода.