Visual Foxpro 9:对象列表框

问题描述 投票:0回答:1

我需要在光标中显示结果,该结果由变量 cListData 接收。我们需要在列表对象中显示这些结果,因此我们选择了 RowSource = "aListData" 和 RowSourceType = 5,因为我们想要显示超过 255 个字符。调试代码后,我们看到 aListData 变量已正确加载元素,但列表对象不显示文本。

LPARAMETERS cListData

* Obtenir le message à partir de SQLMessage
LOCAL cPrefix
cPrefix = SQLMessage(81664)

* Afficher le contenu de cPrefix pour débogage
MESSAGEBOX("Prefix: " + cPrefix)

* Créer et remplir le tableau avec les données préfixées
LOCAL aListData[1]
LOCAL nLines

* Séparer les données en éléments individuels
nLines = ALINES(aListData, cListData, ",")
DIMENSION aListData[nLines + 1]

* Ajouter le préfixe seulement une fois au premier élément du tableau
aListData[1] = cPrefix

* Initialiser un tableau temporaire pour stocker les lignes séparées
LOCAL tempListData[1]
DIMENSION tempListData[nLines]

* Ajouter les éléments au tableau temporaire
FOR i = 1 TO nLines
    tempListData[i] = ALLTRIM(aListData[i])
NEXT

* Remettre les éléments dans aListData en commençant par le deuxième indice
FOR i = 1 TO nLines
    aListData[i + 1] = tempListData[i]
NEXT

* Afficher le contenu de aListData pour débogage
FOR i = 1 TO ALEN(aListData)
    MESSAGEBOX("aListData[" + TRANSFORM(i) + "]: " + aListData[i])
NEXT

* Définir RowSourceType et RowSource pour utiliser le tableau
ThisForm.List.RowSourceType = 5 && Tableau
ThisForm.List.RowSource = "aListData"  && Entre guillemets pour le nom du tableau

* Effacer le Tag du formulaire (optionnel)
ThisForm.Tag = ""

在此输入图片描述

  • 定义表格中的 RowSourceType 和 RowSource ThisForm.List.RowSourceType = 5 && Tableau ThisForm.List.RowSource = "aListData" && Entre guillemets pour le nom du tableau
listbox visual-foxpro foxpro
1个回答
0
投票

那是因为您使用的数组是一个变量,并且它超出了范围。相反,您可以使用数组属性。即:

Public oForm
oForm = Createobject('MyForm')
oForm.Show()

Procedure SQLMessage(tnNumber)
    Return 'MyPrefix'
Endproc

Define Class MyForm As Form
    Dimension aList[1]

    Add Object myList As ListBox With Top= 10, Left=10

    Procedure PrepareListbox
        Lparameters cListData

        * Obtenir le message à partir de SQLMessage
        Local cPrefix
        cPrefix = SQLMessage(81664)

        * Afficher le contenu de cPrefix pour débogage
        Messagebox("Prefix: " + cPrefix)

        * Créer et remplir le tableau avec les données préfixées
        Local aListData[1]
        Local nLines

        * Séparer les données en éléments individuels
        nLines = Alines(aListData, cListData, ",")
        Dimension aListData[nLines + 1]

        * Ajouter le préfixe seulement une fois au premier élément du tableau
        aListData[1] = cPrefix

        * Initialiser un tableau temporaire pour stocker les lignes séparées
        Local tempListData[1]
        Dimension tempListData[nLines]

        * Ajouter les éléments au tableau temporaire
        For i = 1 To nLines
            tempListData[i] = Alltrim(aListData[i])
        Next

        * Remettre les éléments dans aListData en commençant par le deuxième indice
        For i = 1 To nLines
            aListData[i + 1] = tempListData[i]
        Next
        Acopy(aListData,Thisform.aList)

        * Afficher le contenu de aListData pour débogage
        For i = 1 To Alen(aListData)
            Messagebox("aListData[" + Transform(i) + "]: " + aListData[i])
        Next

        * Définir RowSourceType et RowSource pour utiliser le tableau
        Thisform.myList.RowSourceType = 5 && Tableau
        Thisform.myList.RowSource = "thisform.aList"  && Entre guillemets pour le nom du tableau
        Thisform.myList.NumberOfElements = Alen(aListData)

        * Effacer le Tag du formulaire (optionnel)
        Thisform.Tag = ""
    Endproc

    Procedure Init
        This.PrepareListbox("Item1,Item2,ItemX")
    Endproc

Enddefine

我不太明白你使用数组的动机。恕我直言,使用 SQL 是列表或组合框的最佳选择,其灵活性令人惊叹。即:列出客户公司但获取任何列的值(并且不需要转换):

Public oForm
oForm = Createobject('MyForm')
oForm.Show()

Define Class MyForm As Form
    Add Object myList As ListBox With Top=10, Left=10, Width=150
    Add Object myInfo As EditBox With Top=10, Left=170, Width=150, Height=200

    Procedure myList.Init
        This.RowSourceType = 3 && SQL
        This.RowSource = "select Company as ShowCompany, * from _samples + 'data\Customer' into cursor crsCompanies nofilter"
        This.ListIndex = 0
    Endproc

    Procedure myList.InteractiveChange
        Thisform.myInfo.Value = Textmerge('Customer:<< crsCompanies.Cust_Id >> has contact << TRIM(crsCompanies.Contact) >> and max order amount is << crsCompanies.MaxOrdAmt >>')
    Endproc
Enddefine
© www.soinside.com 2019 - 2024. All rights reserved.