Autore Topic: Estrazione di dati dalla tabstrip corrente  (Letto 2447 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Estrazione di dati dalla tabstrip corrente
« il: 09 Aprile 2015, 17:34:06 »
Oggi mi sono scontrato con una possibile anomalia di Gambas, relativamente al puntamento dei campi interni ad una delle linguette di una TabStrip.
Il problema sorge quando cerco di estrarre il contenuto degli oggetti interni alla linguetta, come TextLabel, TextArea. Infatti alla fine del caricamento di una TabStrip, punto alla prima linguetta della TabStrip che diventa perciò visibile.
La mia TabStrip si chiama Schedario e L'istruzione è:
Codice: [Seleziona]
Schedario.Index = 0

Ora molto semplicemente devo estrarre il contenuto di tutte le TextLabel e TextArea contenute in essa:
Codice: [Seleziona]
iIdReColleg = Int(Val(NumIdPartMovv.Text))     
--- bla --- bla --- bla ---
iNuProMovg = Int(Val(NuProMovimGG.Text)) 
$CauDescr = CausDescr.Text
dove gli oggetti.Text sono ripetuti in tutte le linguette della TabStrip Schedario.

Ebbene, tutti i campi destinatari vengono impegnati esclusivamente dai valori contenuti nell'ultima linguetta della TabStrip.
 :ciao:
:ciao:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #1 il: 09 Aprile 2015, 18:38:34 »
Scusa Picavbg ma io, che non sono particolarmente sveglio e infatti ho scelto un tonno come avatar, non ho capito.
Puoi essere un tantino più esplicito
Tu estrai i valori dagli widget dalla prima Tab solo, oppure?
Tu copi i valori nelle altre tab oppure?
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #2 il: 09 Aprile 2015, 21:16:48 »
Vediamo un po'........

Poniamo come esempio un Form sul quale inseriamo un oggetto TabStrip formato da 3 schede. Ciascuna scheda conterrà una TextLabel ed una TextArea, alla proprietà .Text delle quali sarà assegnato un valore stringa.

Codice: gambas [Seleziona]
Public Sub Form_Open()

  Dim b As Byte
  Dim tl As TextLabel
  Dim ta As TextArea

' Attribuiamo 3 schede all'oggetto "TabStrip":
   Schedario.Count = 3

   For b = 0 To Schedario.Count - 1

' Individua la scheda sulla quale si va ad operare:
     Schedario.Index = b
' Crea una "TextLabel" nella scheda attualmente considerata:
     With tl = New TextLabel(Schedario)
       .X = 10
       .Y = 10
       .W = 100
       .H = 50
       .Text = "tl_" & CStr(b)
     End With
' Crea una "TextArea" nella scheda attualmente considerata:
     With ta = New TextArea(Schedario)
       .X = 10
       .Y = 60
       .W = 100
       .H = 50
       .Text = "ta_" & CStr(b)
     End With

   Next

' Impostiamo la scheda di indice 0 (ossia la prima) come attiva:
   Schedario.Index = 0

End


Public Sub Button1_Click()

  Dim ob As Object
  Dim b As Byte
 
' Prendiamo in considerazione il numero totale delle schede presenti nella "TabStrip":
   For b = 0 To Schedario.Count - 1
' Per "ogni" oggetto in qualità di "figlio" presente nella corrente scheda....
     For Each ob In Schedario[b].Children
' ...andiamo a leggere il contenuto della proprietà ".Text" (...che abbiamo precedentemente assegnato come esempio):
       Print ob.Text
     Next
     Print
   Next
 
End
« 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #3 il: 10 Aprile 2015, 12:58:07 »
Tu estrai i valori dagli widget dalla prima Tab solo, oppure?
Tu copi i valori nelle altre tab oppure?

Nè l'una, nè l'altra delle tue supposizioni. Io compilo con alcuni dati rilevati da un DB. una o più linguette di una TabStrip. Poi, in visualizzazione, posso scorrere tutta la TabStrip e, soffermandomi su una linguetta qualsiasi della TabStrip, decido di estrarre i dati presenti solamente in quella linguetta per registrarli, successivamente, in un file sequenziale.txt.
Per maggiore chiarezza, allego una videata operativa del form interessato.
 :)
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #4 il: 10 Aprile 2015, 13:37:15 »
.... in visualizzazione, posso scorrere tutta la TabStrip e, soffermandomi su una linguetta qualsiasi della TabStrip, decido di estrarre i dati presenti solamente in quella linguetta .....
...ma quindi tu vuoi estrarre i dati contenuti dagli oggetti presenti soltanto in una determinata linguetta.

Allora il mio codice, sopra esposto, va modificato così:
Codice: gambas [Seleziona]
Public Sub Form_Open()  
  
 Dim b As Byte  
 Dim tl As TextLabel  
 Dim ta As TextArea  
  
' Attribuiamo 3 schede all'oggetto "TabStrip":  
  Schedario.Count = 3  
  
  For b = 0 To Schedario.Count - 1  
  
' Individua la scheda sulla quale si va ad operare:  
    Schedario.Index = b  
' Crea una "TextLabel" nella scheda attualmente considerata:  
    With tl = New TextLabel(Schedario)  
      .X = 10  
      .Y = 10  
      .W = 100  
      .H = 50  
      .Text = "tl_" & CStr(b)  
    End With  
' Crea una "TextArea" nella scheda attualmente considerata:  
    With ta = New TextArea(Schedario)  
      .X = 10  
      .Y = 60  
      .W = 100  
      .H = 50  
      .Text = "ta_" & CStr(b)  
    End With  
  
  Next  
  
' Impostiamo ad esempio la scheda di indice 0 (ossia la prima) come attiva:  
  Schedario.Index = 0  
  
End  
  
  
Public Sub Button1_Click()  
  
 Dim ob As Object  
  
' Per "ogni" oggetto in qualità di "figlio" presente nella corrente scheda da noi scelta....  
    For Each ob In Schedario[Schedario.Index].Children  
' ...andiamo a leggere il contenuto della proprietà ".Text" (...che abbiamo precedentemente assegnato per realizzare questo esempio):  
      Print ob.Text  
    Next  
  
End
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #5 il: 10 Aprile 2015, 15:03:39 »
Anche io direi che funziona tutto bene nel mio Gambas3 3.7.1 in Ubuntu, ho fatto questa prova:

Codice: gambas [Seleziona]
Public Sub Form_Open()
  
  Dim i As Integer
  Dim c As Control
  Dim tl As TextLabel
  Dim tb As TextBox
  Dim ta As TextArea
  
  For i = 1 To 3    
    For Each c In FMain.Controls    
      Select Case c.Name
        Case "TextLabel" & CStr(i)
          tl = c          
          tl.Text = "Testo della label " & CStr(i)
        Case "TextBox" & CStr(i)
          tb = c
          tb.Text = "Testo della box " & CStr(i)
        Case "TextArea" & CStr(i)
          ta = c
          ta.Text = "Testo della area " & CStr(i)
      End Select
    Next
  Next
  
End

Public Sub Button1_Click()

  Dim i As Integer
  Dim c As Control
  Dim tl As TextLabel
  Dim tb As TextBox
  Dim ta As TextArea
  
  For i = 1 To 3    
    For Each c In FMain.Controls    
      Select Case c.Name
        Case "TextLabel" & CStr(i)
          tl = c          
          Print tl.Text
        Case "TextBox" & CStr(i)
          tb = c
          Print tb.Text
        Case "TextArea" & CStr(i)
          ta = c
          Print ta.Text
      End Select
    Next
  Next

End

 :ciao:
P.S. Mi ero dimenticato di allegare il form...
« Ultima modifica: 10 Aprile 2015, 15:11:20 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #6 il: 10 Aprile 2015, 15:31:14 »

Codice: [Seleziona]
iIdReColleg = Int(Val(NumIdPartMovv.Text))     
--- bla --- bla --- bla ---
iNuProMovg = Int(Val(NuProMovimGG.Text)) 
$CauDescr = CausDescr.Text
dove gli oggetti.Text sono ripetuti in tutte le linguette della TabStrip Schedario.

Ebbene, tutti i campi destinatari vengono impegnati esclusivamente dai valori contenuti nell'ultima linguetta della TabStrip.
 :ciao:

Mi è venuto un dubbio, non è che tu per caso hai dato gli stessi nomi per ogni tipo di widget in ogni scheda (linguetta) della TabStrip senza numerarli? Scusa l'adire...  :)
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #7 il: 10 Aprile 2015, 17:05:41 »
Mi è venuto un dubbio, non è che tu per caso hai dato gli stessi nomi per ogni tipo di widget in ogni scheda (linguetta) della TabStrip senza numerarli? Scusa l'adire...  :)

E perchè mai dovrei numerarli? A che serve allora il puntamento sulla linguetta desiderata con l'istruzione Schedario.Index = indice  (dove indice = N° di linguetta) ?
 ;)
:ciao:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #8 il: 10 Aprile 2015, 17:33:58 »
E perchè mai dovrei numerarli? A che serve allora il puntamento sulla linguetta desiderata con l'istruzione Schedario.Index = indice  (dove indice = N° di linguetta) ?
 ;)

Forse ti dovresti porre la domanda in modo diverso: Se avessi fatto come fa Gianluigi avrei i problemi che invece mi ritrovo?
 :ciao:

P.S. Ti offro uno spunto di riflessione:
Prova a disegnare su una nuova finestra (form) un TabStrip, impostane il count a 3 o più, poi ci inserisci come da mia istantanea del precedente post una TextLabel, una TextBox, e una TextArea.
Quindi tenendo premuto Ctrl selezioni i tre widget e fai Ctrl+C, quindi in ogni altra tab dai Ctrl+V e poi leggi che nome Gambas ha dato di default agli widget e chiediti il perché.
« Ultima modifica: 10 Aprile 2015, 18:03:20 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #9 il: 10 Aprile 2015, 18:56:35 »
@ Gianluigi
Ecco come io aggiungo una nuova linguetta ad una tabstrip esistente:
Codice: gambas [Seleziona]
 iTotEle = vTbSkDett.Count / 10 - 1
  Schedario.Count = iTotEle + 2
  For i = 0 To iTotEle
    yFlag = CByte(0)     'azzera la variabile byte "yFlag"
    With Schedario    'dimensiono lo schedario con tutte le schede occorrenti compresa quella di FINE
          .Index = i             'punto alla scheda corrente
          .Text = "Sk n." & CStr(i + 1)
          .Height = 560
          .Width = 784
          .Enabled = True
          .Visible = True
    End With
    With AreaPartmovv = New Frame(Schedario) As "AreaPartmovv"
          .X = 0
          .Y = 5
          .Width = 776
          .Height = 192
          .Background = iColorBeige
          .Text = String(10, " ") & "----- Area  PARTMOVV -----"
          .Enabled = True
          .Visible = True
    End With
    With Label1 = New Label(AreaPartmovv) As "Label1"
          .X = 8
          .Y = 32
          .Width = 88
          .Height = 24
          .Border = Border.None     'Border = 0
          .Alignment = Align.Center       ' = 3
          .Font.Name = "Liberation Serif"
          .Font.Size = 11
          .Font.Bold = False
          .Text = "Codice Id"
          .Enabled = True
          .Visible = True
    End With
---- bla ---- bla ---- bla----
  Next


Insisto col dire che l'indirizzamento su qualsiasia linguetta di una TabStrip viene effettuato con TabStrip.Index = Integer. Pertanto dopo detta istruzione devo essere posizionato, per effetto della proprietà Index, sempre e solamente sulla linguetta indirizzata dall'istruzione precedente, cosi come quando mi sposto da una linguetta all'altra attraverso i seguenti eventi:
Codice: gambas [Seleziona]
Public Sub SkPrec_Click()
Dim iInd As Integer
'--------------------------------
  iInd = Schedario.Index
  If iInd > 0 Then
      iInd -= 1
  Endif
  Schedario.Index = iInd
End

Public Sub SkSucc_Click()
Dim iInd As Integer
'--------------------------------
  iInd = Schedario.Index
  If iInd < (Schedario.Count - 1) Then
      iInd += 1
  Endif 
  Schedario.Index = iInd
End



Non capisco perchè, per la visualizzazione in primo piano delle varie linguette, l'istruzione funzioni, mentre per l'estrazione dei valori contenuti al suo internio non debba funzionare.
In realtà la TabStrip funziona come un'array bidemensionale, perciò dopo essere posizionato dentro una linguetta, devo rilevare sempre i dati in essa contenuti.
:o

Non può essere altro che un BUG.

Poi Voi potete pensarla come volete.
 :-\
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #10 il: 10 Aprile 2015, 19:01:09 »
Non capisco perchè, per la visualizzazione in primo piano delle varie linguette, l'istruzione funzioni, mentre per l'estrazione dei valori contenuti al suo internio non debba funzionare.


Scusa, ma tu hai provato il mio secondo codice ?
http://www.gambas-it.org/smf/index.php?topic=4006.msg35518#msg35518
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #11 il: 10 Aprile 2015, 19:27:40 »

Scusa, ma tu hai provato il mio secondo codice ?
http://www.gambas-it.org/smf/index.php?topic=4006.msg35518#msg35518

Appunto a me il codice di vuott funziona bene se funziona anche a te vuol dire che non c'è bug perché usa il tuo metodo.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Estrazione di dati dalla tabstrip corrente
« Risposta #12 il: 10 Aprile 2015, 20:03:33 »
« 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. »