Tôi hiện đang cố gắng sử dụng một chút cờ enum trong một dự án VB6/COM. Tuy nhiên, khi cố gắng đọc các giá trị từ enum, tôi nhận được kết quả không phù hợp.Cờ trong VB6 không trả lại giá trị chính xác
Dưới đây là định nghĩa enum:
Enum Fruits
None = 0
Apple = 1
Strawberry = 2
Lemon = 4
End Enum
Tôi đã một đối tượng mà cho thấy một loại tài sản của Trái cây
Public Get AvailableFruits as Fruits
Mã này rằng sẽ có thể đọc các giá trị được sử dụng để hiển thị/ẩn nhãn tùy thuộc vào giá trị của từng bit của enum:
lblAppleAvailable.Visible = basket.AvailableFruits And Fruits.Apple
Khi mã này được thực hiện và tôi có basket.AvailableFruits = 0
, tôi nhận được True là kết quả.
Bất kỳ ý tưởng nào về điều gì có thể gây ra hành vi này?
Edit:
Tôi đã thử với các giá trị khác nhau của enum:
basket.AvailableFruits = 0
basket.AvailableFruits And Apple // Returns True
basket.AvailableFruits And Strawberry // Returns True
basket.AvailableFruits And Lemon // Returns False
Là một nút phụ, khi gỡ lỗi mã, Nếu tôi đặt sự biểu hiện trong một biểu thức đồng hồ, tôi nhận được giá trị chính xác; nhưng khi biểu thức được đánh giá trong mã của tôi, nó vẫn trả về True.
tôi đã cố gắng sử dụng một cú pháp kiểm tra khác nhau:
(basket.AvailableFruits And Fruits.Apple) = Fruits.Apple
Tuy nhận Đúng khi basket.AvailableFruits = 0
:-(
Giải pháp
Sau khi thử nghiệm các giải pháp khác nhau, tôi đã có thể thu hẹp vấn đề cho thành phần COM Bộ mã hóa ban đầu của thành phần này có một con trỏ được đặt thành 0 thay vì trả về 0 làm giá trị, gây ra p khi cố gắng đọc giá trị.
Tôi đã chọn câu trả lời FlipScript vì chức năng trợ giúp có vẻ là mẹo hay để cải thiện khả năng đọc của mã.
Mã của bạn cho 'basket.AvailableFruits' là gì? – LittleBobbyTables
@LBT: Tôi không có quyền truy cập vào mã thực của thuộc tính, nó là một phần của đối tượng COM được mã hóa bằng C++. –
Vì vậy, khi AvailableFruits = 0, sau đó trong trường hợp Apple (0 AND 1) = True? Tuy nhiên, trong trường hợp Lemon (0 AND 4) = False? Hmmm .... Có thể có điều gì đó hơn kiểm tra bitfield đang diễn ra ở đây ... – Flipster