Autore Topic: [RISOLTO] Creazione array di controlli form e modifica delle proprietà  (Letto 1706 volte)

Offline francy

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Ciao ragazzi, sono nuovo del forum e spero di potervi essere di aiuto come voi lo sarete sicuramente per me.
Devo creare un piccolo gestionale specifico,(altamente personalizzato), per la mia attività. Appena sarà pronto lo pubblicherò sul sito.
Adesso però mi ritrovo con un form pieno di label ed un db dal quale facendo una query devo prendere dei nomi. Ad ogni label dovrei associare un nome.
L'unica soluzione che mi è venuta è stata la seguente:

Dim cnt As Object
Dim risnome As Result

For Each cnt In Me.Controls
        If Object.is(cnt, "Label") Then
                Object.SetProperty(cnt, "Text", risnome!nome & " " & "(" & risnome!sigla & ")")  
        Endif
Next

Il problema è che così facendo tutte le label presenti nel form come proprietà .text possiedono nome e sigla del primo record della query. No ne riesco a venire a capo.
Grazie anticipatamente a tutti.
« Ultima modifica: 08 Settembre 2012, 17:38:40 da francy »

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #1 il: 07 Settembre 2012, 22:28:44 »
bisognerebbe vedere anche la query con cui ricavi risnome
Matteo DoubleMM Mion

Offline francy

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #2 il: 07 Settembre 2012, 22:36:24 »
Allora:
Dim qnome As String

qnome = "SELECT nome, sigla FROM nome_apiari"
risnome = apidb.Exec(qnome)

Altro tentativo fatto in questi minuti:

Dim raccolta As Object[]
Dim i As Integer

raccolta.Add(Me.nomelbl0)
raccolta.Add(Me.nomelbl1)
raccolta.Add(Me.nomelbl2)

raccolta.Add ....... per tutte le label presenti nel form

For i = 0 To risnome.max
raccolta(i).text = risnome!nome & " " & "(" & risnome!sigla & ")"
Next
i = i + 1

Durante il debug per quest'ultima soluzione mi si rileva che Me.nomelbl0 e così via sono degli oggetti nulli.

In realtà per chi ha avuto "sotto le mani" il vs 2012 per win8, questo form dovrebbe essere un qualcosa che si avvicina al group item di una qualsiasi soluzione in stile metrò.
« Ultima modifica: 07 Settembre 2012, 22:58:43 da francy »

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #3 il: 07 Settembre 2012, 23:22:38 »
ma per nome della label intendi il testo che la label deve mostrare sul form o il nome stesso della label?
Matteo DoubleMM Mion

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #4 il: 08 Settembre 2012, 00:21:49 »
Ciao, prova così
Codice: gambas [Seleziona]
      risnome.MoveFirst
      For i = 0 To risnome.count - 1
         raccolta(i).text = risnome!nome & " " & "(" & risnome!sigla & ")"
         risnome.movenext
      Next

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #5 il: 08 Settembre 2012, 00:32:35 »
si se per nome intendi la proprietà text puoi fare come Golia o in alternativa

Codice: [Seleziona]
for each risnome
  raccolta(i).text = risnome!nome & " " & "(" & risnome!sigla & ")"
  inc i
next

posto un esempio che modificato potrebbe aiutarti, io l'ho usato per settare la stessa altezza ad una serie di button dentro un pannello, se dovessi aggiungere altri button la procedura cambia le altezze e le regola in base alla quantità di button

Codice: [Seleziona]
 For i = 1 To Panel1.Children.Count
   Panel1.Children[i - 1].h = Panel1.h / Panel1.Children.Count
   Panel1.Children[i - 1].Font = Font["arial, 12, Bold"]
 Next
Matteo DoubleMM Mion

Offline francy

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #6 il: 08 Settembre 2012, 02:19:18 »
Grazie per l'aiuto. Allora, si, per nome della label intendo il testo che la label deve mostrare sul form.
Ulteriore tentativo:

Dim y As Integer
Dim raccolta As Object[]
Dim cnt As Object (oppure Control)

For Each cnt In Me.Controls
  If Object.Type(cnt) = "Label" Then
    y = 0
    raccolta[y].Add(cnt) (oppure raccolta[y].Add(cnt.name))
    Inc y
  Endif
Next

Il problema è sempre lo stesso: L'argomento di raccolta[y].add() è sempre un null object (cnt oppure cnt.name).
Sicuramente risolto questo intoppo di serializzazione i vostri esempi sono entrambi funzionanti e validi.

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #7 il: 08 Settembre 2012, 13:06:52 »
prova così:

Codice: [Seleziona]
Public Sub Button1_Click()
 
  Dim MioArray As String[] = ["uno", "due", "tre"]
  Dim i As Integer = 0
  Dim cnt As Control
 
  For Each cnt In FMain.Controls
    If Object.Type(cnt) = "Label" Then
      Object.SetProperty(cnt, "Text", MioArray[i])
      Inc i
    Endif   
  Next
 
End

naturalmente è il codice di un form con 3 label e un button

Matteo DoubleMM Mion

Offline francy

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #8 il: 08 Settembre 2012, 15:49:05 »
Allora, la situazione sembra paradossale:

Dim i As Integer
Dim raccolta As String[]

For i = 0 To risnome.Max
  raccolta = risnome!nome              .........oppure......... raccolta.add(risnome!nome)
  Inc i
  risnome.MoveNext
Next

.................oppure...............

i=0
For Each risnome
  raccolta = risnome!nome          .........oppure......... raccolta.add(risnome!nome)
  Inc i
Next

In entrambi i metodi raccolta=risnome!nome è un null object. A questo punto credo che sia assurdo perchè una volta dichiarato l'array raccolta e presi dei valori dal db che sono dei nomi e quindi delle stringhe che non contengono nessun carattere speciale, perchè si rileva l'oggetto nullo?!?

P.S.: anche se si visualizza solo raccolta dovrebbe esservi anche l'indice i, cioè raccolta(i)
« Ultima modifica: 08 Settembre 2012, 15:51:32 da francy »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #9 il: 08 Settembre 2012, 16:09:28 »
fa un'altra prova

Dim i As Integer
Dim raccolta As New String[]    '<----------

For i = 0 To risnome.Max
  raccolta.add(risnome!nome)
  risnome.MoveNext
Next

Offline francy

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #10 il: 08 Settembre 2012, 16:33:20 »
Ok con la dichiarazione New String[] il mio array è inizializzato. Poi con:

For Each risnome
  raccolta.Add(risnome!nome & " " & "(" & risnome!sigla & ")")
Next

riesco a riempirlo con i dati che mi interessano. Una volta avviato il debug, e tornando all'inizio del mio problema, in ogni label presente nel form la proprietà text viene riempita solo con il primo valore del record della mia query. Il codice utilizzato è:

Dim i As Integer
Dim raccolta As New String[]
Dim cnt As Control

........apro la connessione con il db (OK), faccio la mia query (OK).............

For Each risnome
  raccolta.Add(risnome!nome & " " & "(" & risnome!sigla & ")")
Next

For Each cnt In Me.Controls
  If Object.Type(cnt) = "Label" Then
    For i = 0 To risnome.Max
    Object.SetProperty(cnt, "Text", raccolta)
    Inc i
    Next
  Endif
Next

Ultimo aggiornamento:

Se Inc i lo si lascia così com'è allora tutte le label come proprietà .text saranno associate al primo record della query. Se Inc i lo si dovesse mettere tra il next e l'endif le proprietà .text saranno associate all'ultimo record della query. Il mio problema è però quello di associare ad una label <-----> un solo nome. Aiutatemi perfavore.
« Ultima modifica: 08 Settembre 2012, 17:05:06 da francy »

Offline francy

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: Creazione array di controlli form e modifica delle proprietà
« Risposta #11 il: 08 Settembre 2012, 17:34:42 »
Scusate per il nuovo messaggio, ma ho trovato la soluzione e la posto in un nuovo "spazio" per evitare confusione. Grazie a tutti per il prezioso aiuto fornitomi.

Problema: più label presenti in un form alle quali associare a ciascuna un nome ed una sigla, questi ultimi valori presi tramite query da un db.

Soluzione: serializzare in un array di stringhe i nomi e le sigle; serializzare le label presenti nel form in un array di oggetti; associare al corrispondente indice di ciascun elemento dell'array di oggetti l'elemento dell'array di stringhe.

Il tutto sono riuscito a trudurlo con questo codice:

Dim risnome As Result
Dim i As Integer
Dim raccoltanome As New String[]
Dim raccoltacnt As New Object[]
Dim cnt As Control

........apro la connessione con il db (OK), faccio la mia query (OK)...........

For Each risnome
  raccoltanome.Add(risnome!nome & " " & "(" & risnome!sigla & ")")
Next

For Each cnt In Me.Controls
  If Object.Type(cnt) = "Label" Then
   raccoltacnt.Add(cnt)
  Endif
Next

For i = 0 To raccoltanome.Max
  raccoltacnt(i).text = raccoltanome(i)
Next
Inc i

Per qualsiasi miglioria al codice, i consigli sono sempre ben accetti.

PS: l'indice i è stato messo tra le parentesi tonde perchè se messo tra parentesi quadre una volta inviato il msg non vengono scritte ne le parentesi ne l'indice.
« Ultima modifica: 08 Settembre 2012, 17:40:43 da francy »

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: [RISOLTO] Creazione array di controlli form e modifica delle proprietà
« Risposta #12 il: 08 Settembre 2012, 18:01:19 »
Citazione
For Each cnt In Me.Controls
  If Object.Type(cnt) = "Label" Then
   raccoltacnt.Add(cnt)
  Endif
Next

For i = 0 To raccoltanome.Max
  raccoltacnt(i).text = raccoltanome(i)
Next
Inc i

perchè non fai tutto in un unico ciclo?
Matteo DoubleMM Mion

Offline francy

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: [RISOLTO] Creazione array di controlli form e modifica delle proprietà
« Risposta #13 il: 08 Settembre 2012, 18:12:03 »
Se provo a fare tutto in un unico ciclo mi da come errore out of bounds quando associo gli elementi dei due array. Qualche suggerimento di "codice"?!?

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: [RISOLTO] Creazione array di controlli form e modifica delle proprietà
« Risposta #14 il: 08 Settembre 2012, 18:33:45 »
prova  a mettere un print i vedrai che c'è un indice di un array sbagliato
Matteo DoubleMM Mion