Autore Topic: Array di Valuebox[RISOLTO]  (Letto 2084 volte)

Offline cellman

  • Gamberetto
  • *
  • Post: 14
    • Mostra profilo
Array di Valuebox[RISOLTO]
« il: 08 Dicembre 2013, 10:36:20 »
Ciao a tutti.
Sono nuovo del forum e come spesso accade arrivo qui alla ricerca di aiuto ;-)
Ho iniziato ad usare gambas da pochissimo per un progetto universitario che devo fare.
Il progetto è corposo ma il primo programma da fare è un programma che calcoli il prodotto tra matrici. Ci sono riuscito gestendo ogni elemento delle matrici come un valuebox. Il problema è che il codice risulta molto rindondante con codice tipo:
a[0, 0] = ValueBox1.Value
a[0, 1] = ValueBox2.Value
a[1, 0] = ValueBox3.Value
a[1, 1] = ValueBox4.Value
b[0, 0] = ValueBox5.Value
b[0, 1] = ValueBox6.Value
b[1, 0] = ValueBox7.Value
b[1, 1] = ValueBox8.Value

La mia domanda è: posso gestire i valuebox creati nell'interfaccia grafica, come un array? Così da sostituire righe come queste semplicemente con un ciclo for?
Sto usando Gambas3.
Grazie a chiunque mi potrà aiutare ;-)
« Ultima modifica: 10 Dicembre 2013, 16:15:30 da cellman »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Array di Valuebox
« Risposta #1 il: 08 Dicembre 2013, 12:01:50 »
Potresti usare la proprietà Tag dei valuebox, assegnare un numero progressivo e ciclare su quello.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline cellman

  • Gamberetto
  • *
  • Post: 14
    • Mostra profilo
Re: Array di Valuebox
« Risposta #2 il: 08 Dicembre 2013, 15:15:00 »
Ti ringrazio :-)
Non trovo però come usare tag nei valuebox....

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.262
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Array di Valuebox
« Risposta #3 il: 08 Dicembre 2013, 16:38:49 »
Non trovo però come usare tag nei valuebox....
L'assegnamento di valori alle proprietà dei Controlli può avvenire:
* dall'IDE di Gambas cliccando una volta sul ValueBox e quindi cercando nella colonna di destra la proprietà .Tag si inserisce il valore desiderato;
* via codice:
- assegnando direttamente il valore alla proprietà dell'oggetto:
Codice: gambas [Seleziona]
valuebox1.Tag = valore_da_assegnare

- usando il metodo .SetProperty() della Classe Object:
Codice: gambas [Seleziona]
Object.SetProperty(ValueBox1, "Tag", valore_da_assegnare)

« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline cellman

  • Gamberetto
  • *
  • Post: 14
    • Mostra profilo
Re: Array di Valuebox
« Risposta #4 il: 08 Dicembre 2013, 16:54:50 »
Grandissimi!
E poi la richiamo come fosse una variabile?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.262
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Array di Valuebox
« Risposta #5 il: 08 Dicembre 2013, 17:13:21 »
E poi la richiamo come fosse una variabile?

...te la puoi spupazzare come fosse una variabile.  ;D

Ricorda anche che la proprietà .Tag può essa stessa comportarsi ed essere utilizzata come fosse un vettore:
http://www.gambas-it.org/wiki/index.php?title=Utilizzare_la_propriet%C3%A0_.Tag_come_un_array_di_tipo_Variant
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline cellman

  • Gamberetto
  • *
  • Post: 14
    • Mostra profilo
Re: Array di Valuebox
« Risposta #6 il: 08 Dicembre 2013, 17:24:17 »
Scusatemi ma sono duro di comprendonio...
Un codice come questo (il bottone che calcola il prodotto tra 2 matrici 2x2)

Public Sub Button2_Click()

Dim i As Integer
Dim j As Integer

a[0, 0] = ValueBox1.Value
a[0, 1] = ValueBox2.Value
a[1, 0] = ValueBox3.Value
a[1, 1] = ValueBox4.Value
b[0, 0] = ValueBox5.Value
b[0, 1] = ValueBox6.Value
b[1, 0] = ValueBox7.Value
b[1, 1] = ValueBox8.Value


 For i = 0 To 1 Step 1
  For j = 0 To 1 Step 1

  c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j]

    Next
   
Next
ValueBox9.Value = c[0, 0]
ValueBox10.Value = c[0, 1]
ValueBox11.Value = c[1, 0]
ValueBox12.Value = c[1, 1]
End

Con il Tag come lo gestisco?

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Array di Valuebox
« Risposta #7 il: 08 Dicembre 2013, 17:33:00 »
Oppure puoi provare ad adattare una cosa del genere:

Codice: [Seleziona]
For i = 1 To 37
   controllo = "ValueBox" & Str$(i)
   Write #handle, CShort(Me.Controls[controllo].value)
Next

In pratica nel contenitore cerchi le tue valuebox e gli assegni il tag o il valore.
« Ultima modifica: 08 Dicembre 2013, 17:36:12 da Top Fuel »
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.262
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Array di Valuebox
« Risposta #8 il: 08 Dicembre 2013, 17:34:40 »
Con il Tag come lo gestisco?

Il suggerimento di Top Fuel di utilizzare la proprietà .Tag è finalizzato ad evitare di scrivere questa parte del tuo codice:
Codice: gambas [Seleziona]
a[0, 0] = ValueBox1.Value
a[0, 1] = ValueBox2.Value
a[1, 0] = ValueBox3.Value
a[1, 1] = ValueBox4.Value
b[0, 0] = ValueBox5.Value
b[0, 1] = ValueBox6.Value
b[1, 0] = ValueBox7.Value
b[1, 1] = ValueBox8.Value

Il .Tag (ma non solo esso, in vero) spesso è utile per individuare, distinguere - proprio in un ciclo - un oggetto rispetto agli altri della medesima Classe.... può essere utilizzato insomma come una sorta di segno di riconoscimento portato da quel solo Controllo in mezzo a tanti della medesima Classe.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.262
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Array di Valuebox
« Risposta #9 il: 08 Dicembre 2013, 17:41:59 »
Oppure puoi provare ad adattare una cosa del genere:

Codice: [Seleziona]
For i = 1 To 37
   controllo = "ValueBox" & Str$(i)
   Write #handle, CShort(Me.Controls[controllo].value)
Next

In pratica nel contenitore cerchi le tue valuebox e gli assegni il tag o il valore.

Non capisco quel Write !   ???

Inoltre il grosso problema si porrebbe nell'assegnazione dei valori ai vari elementi delle Matrici previste !
« Ultima modifica: 08 Dicembre 2013, 17:46:01 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Array di Valuebox
« Risposta #10 il: 08 Dicembre 2013, 17:49:58 »
E' solo un pezzettino di un mio progetto che ho messo come esempio. :)
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Array di Valuebox
« Risposta #11 il: 08 Dicembre 2013, 20:59:22 »
Comunque, alla fine pensandoci su meglio, siccome sono poche istruzioni è quasi meglio lasciare tutto così com'è e usare il tag per altri scopi. :-\
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.262
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Array di Valuebox
« Risposta #12 il: 09 Dicembre 2013, 01:08:54 »
La mia domanda è: posso gestire i valuebox creati nell'interfaccia grafica, come un array?

Io però vorrei ritornare alla domanda essenziale di cellman, che riporto in citazione.
La risposta è affermativa. Un possibile codice sarebbe questo, che utilizza un vettore di tipo ValueBox:
Codice: gambas [Seleziona]

Private vb As New ValueBox[]


Public Sub Button1_Click()

  Dim ob As Object
 
' Per ogni oggetto posto sul Form...
   For Each ob In FMain.Children
'...se esso è un oggetto di tipo "ValueBox", allora la sua variabile
' di riferimento viene posta nel vettore monodimensionale:
     If Object.Type(ob) = "ValueBox" Then vb.Add(ob)
   Next

End


La variabile vettoriale di tipo "ValueBox" potrà dunque essere gestita successivamente come un qualsiasi altro vettore e tenendo conto dei metodi e delle proprietà appartenenti alla Classe "ValueBox".
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline cellman

  • Gamberetto
  • *
  • Post: 14
    • Mostra profilo
Re: Array di Valuebox
« Risposta #13 il: 09 Dicembre 2013, 17:55:31 »
Alla fine ho proprio risolto gestendo come un array di valuebox. Il codice per una matrice 2x2 che ho usato è:
  For j = 0 To 3
   


    With t1 = New ValueBox(Me) As "Matrice1"
      If j Mod 2 = 0 Then
        .X = 50
        .Y = 200 + (30 * j)
        .W = 50
        .H = 50
      Else
        .X = 110
        .Y = 200 + (30 * (j - 1))
        .W = 50
        .H = 50
      Endif
    End With

 A.Add(t1)
 
 Next

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Array di Valuebox
« Risposta #14 il: 09 Dicembre 2013, 18:19:16 »
Se hai risolto ti invito gentilmente ad editare il primo messaggio inserendo [RISOLTO] nel titolo. Grazie.