Свойства элемента управления в Visual Basic 6 - PullRequest
1 голос
/ 04 декабря 2009

Есть ли способ запросить свойство элемента управления в цикле ??

Мне нужно что-то вроде этого:

For each p in control.properties
    if p = "Value" then
        msgbox "I Have Value Property"
    elseif p = "Caption" then
        msgbox "I Have Caption Property"
    end if 
next

Это можно сделать как-нибудь?

Ответы [ 3 ]

5 голосов
/ 04 декабря 2009

Нашел этот код на Экспертной бирже. Добавить ссылку на TypeLib Information .

Public Enum EPType
    ReadableProperties = 2
    WriteableProperties = 4
End Enum

Public Function EnumerateProperties(pObject As Object, pType As EPType) As Variant
    Dim rArray() As String
    Dim iVal As Long
    Dim TypeLib As TLI.InterfaceInfo
    Dim Prop As TLI.MemberInfo
    On Error Resume Next
    ReDim rArray(0) As String
    Set TypeLib = TLI.InterfaceInfoFromObject(pObject)
    For Each Prop In TypeLib.Members
        If Prop.InvokeKind = pType Then
            iVal = UBound(rArray)
            rArray(iVal) = UCase$(Prop.Name)
            ReDim Preserve rArray(iVal + 1) As String
        End If
    Next
    ReDim Preserve rArray(UBound(rArray) - 1) As String
    EnumerateProperties = rArray
End Function

Вы можете запросить список доступных для чтения или записи свойств.

Бонус, спросите, существует ли конкретная собственность.

Public Function DoesPropertyExist(pObject As Object, ByVal _
    PropertyName As String, pType As EPType) As Boolean
    Dim Item As Variant
    PropertyName = UCase$(PropertyName)
    For Each Item In EnumerateProperties(pObject, pType)
        If Item = PropertyName Then
            DoesPropertyExist = True
            Exit For
        End If
    Next
End Function
2 голосов
/ 04 декабря 2009

Бинер дал превосходный прямой ответ на вопрос, который вы задали.

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

Function sGetSomeText(ctl As Object) As String 
  On Error Resume Next 
  sGetSomeText = ctl.Text
  If Err = 0 Then Exit Function 
  sGetSomeText = ctl.Caption
  If Err = 0 Then Exit Function 
  sGetSomeText = ctl.Value
  If Err = 0 Then Exit Function
  sGetSomeText = "" 'Nothing worked '
End Function 

Другой подход заключается в проверке типа элемента управления во время выполнения. Вы можете использовать

Затем вы можете переключиться на код для определенных типов элементов управления, которые определенно имеют свойство Text и т. Д.

0 голосов
/ 04 декабря 2009

Я не уверен, что вы надеетесь достичь, но я уверен, что VB6 не поддерживает то, о чем вы говорите. Вы можете попробовать что-то вроде этого:

If control.Value Is Not Nothing Then
   msgbox "I Have Value Property"
Else If control.Caption Is Not Nothing Then
   msgbox "I Have Caption Property"

Посмотрите, достигнет ли это того, чего вы хотите.

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