[Gambas-user] String[] in Sub, what is going wrong

Rolf-Werner Eilert eilert-sprachen at ...221...
Thu Apr 28 09:00:53 CEST 2016


Am 27.04.2016 18:39, schrieb T Lee Davidson:
> On 04/27/2016 12:02 PM, Rolf-Werner Eilert wrote:
>> This is the code:
>>
>> Public Sub setFontNameList(fontliste As String[])
>> Dim i As Integer
>>
>>      fntexc.Clear
>>
>>      For i = 0 To fontliste.count - 1
>>        fntexc.Add(fontliste[i])
>>      Next
>>
>> End
>>
>> It didn't run, so I set a Wait to the line fntexc.Clear. "fontliste[]"
>> is delivered as it should, it has 3 items. But fontliste.Count is 0,
>> fontliste.Max would be -1. So it is never copied.
>>
>> What is going wrong here???
>>
>> Regards
>> Rolf
>>
> I have to assume that "fntexc" is a 'global' since it is not declared in the Sub.
>
> This code...
>
> ' Gambas module file
>
> Public fntexc As String[]
>
> Public Sub Main()
>
>     Dim sFont As String
>
>     fntexc = []
>     setFontNameList(["courier", "helvetica", "arial"])
>     For Each sFont In fntexc
>       Print sFont
>     Next
> End
>
> Public Sub setFontNameList(fontliste As String[])
>     Dim i As Integer
>
>     Debug fontliste.Count
>
>     fntexc.Clear
>
>     For i = 0 To fontliste.count - 1
>       fntexc.Add(fontliste[i])
>     Next
>
> End
>
> ...works, and outputs:
> MMain.setFontNameList.19: 3
> courier
> helvetica
> arial
>
>
> Hope that helps,
>

Well, thank you. I will answer here to avoid double explanations. Thank 
you all for your answers!

You are right, fntexc is declared upstairs in the module where this 
function is. The problem is, however, not fntexc but fontliste. The 
function is called from another module. Fontliste is declared PUBLIC 
there, and when the function is called, fontliste contains the items. 
But when fontliste shall be used within the function, it appears to be 
empty.

So it is module 1 which has a string array named FontListe:

Public FontListe As New String[]
.
.
.
Public Sub btnOK_Click()
.
.
     ini.setFontNameList(FontListe)
.
.
End

And in module 2 ("ini") the contents is to be copied into the string 
array which is there:

Private fntexc As New String[]
.
.
.
Public Sub setFontNameList(fontliste As String[])
'Dim i As Integer

   fntexc.Clear    'When I stop here, fontliste is filled

   fntexc.Insert(fontliste) 'When I stop here, fontliste is empty

   ' For i = 0 To fntliste.count - 1 'Thanks to Christof for the tip, 
but it doesn't run with Insert either
   '   fntexc.Add(fntliste[i])
   ' Next

End

So my explanation is that I might need another string array which I 
declare within the calling Sub in module 1. But I cannot remember I have 
ever had a similar issue before. What confuses me most is that I can see 
the contents of the array when I enter the function, but it appears 
empty when I want to access it there.

Rolf





More information about the User mailing list