我需要在光标中显示结果,该结果由变量 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 = ""
那是因为您使用的数组是一个变量,并且它超出了范围。相反,您可以使用数组属性。即:
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