Autore Topic: Array di controlli  (Letto 3274 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #30 il: 13 Gennaio 2016, 10:49:45 »
Ponendo immediatamente prima del comando c.Text = ""
la riga:
 
Codice: [Seleziona]
Print Object.Type(c)

cosa viene scritto in console ?
« Ultima modifica: 13 Gennaio 2016, 10:50:19 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #31 il: 13 Gennaio 2016, 10:59:06 »
Ciao vuott,
forse dovrebbe sfruttare i tuoi precedenti consigli e basarsi su Object e Children farebbe prima.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline luca.decarlo

  • Gamberetto
  • *
  • Post: 49
    • Mostra profilo
Re:Array di controlli
« Risposta #32 il: 13 Gennaio 2016, 11:12:39 »
Ponendo immediatamente prima del comando c.Text = ""
la riga:
 
Codice: [Seleziona]
Print Object.Type(c)

cosa viene scritto in console ?


scrive: TextBox

Offline luca.decarlo

  • Gamberetto
  • *
  • Post: 49
    • Mostra profilo
Re:Array di controlli
« Risposta #33 il: 13 Gennaio 2016, 11:15:54 »
Ciao vuott,
forse dovrebbe sfruttare i tuoi precedenti consigli e basarsi su Object e Children farebbe prima.
 :ciao:

Forse sbaglio io, ma ho provato a rivedere quello che dici, in realtà il Children mi cambierebbe solo il ciclo for each, poi comunque nell'esempio viene comunque eseguito obj.enabled dopo il test di obkect.type, quindi mi darebbe lo stesso errore.

Luca

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #34 il: 13 Gennaio 2016, 11:25:25 »
Ciao vuott,
forse dovrebbe sfruttare i tuoi precedenti consigli e basarsi su Object e Children farebbe prima.
 :ciao:

Forse sbaglio io, ma ho provato a rivedere quello che dici, in realtà il Children mi cambierebbe solo il ciclo for each, poi comunque nell'esempio viene comunque eseguito obj.enabled dopo il test di obkect.type, quindi mi darebbe lo stesso errore.

Luca

Forse non mi sono spiegato bene:
Se invece di c e controls cicli o e children come aveva a suo tempo suggerito vuott avresti subito il tipo di oggetto e potresti usare text.
Ti dovrebbe bastare provare il tuo codice così come è sostituendo o a c, object a control e children a controls. Forse c'è un errore sulla combobox, se usi name deve essere completa del numero.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline luca.decarlo

  • Gamberetto
  • *
  • Post: 49
    • Mostra profilo
Re:Array di controlli
« Risposta #35 il: 13 Gennaio 2016, 11:36:13 »
A Ok Gianluigi, ora ho capito ... sai l'età  ;D

Provo subito!

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #36 il: 13 Gennaio 2016, 11:54:50 »
Codice: [Seleziona]
If c.Name Like "TextBox[2,3,4,5]" And bAzzero = True Then
        c.Text = ""

...perché hai usato la parola chiave " Like " invece di " = " ?  ???
« 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 luca.decarlo

  • Gamberetto
  • *
  • Post: 49
    • Mostra profilo
Re:Array di controlli
« Risposta #37 il: 13 Gennaio 2016, 11:56:09 »
Fatto prova veloce così e sembra funzionare tutto!!



Codice: [Seleziona]
Dim o As Object
 
   For Each o In Me.Children
    If o.Tag = 1 Then
     o.Enabled = bValue
     If o.Name Like "TextBox[2,3,4,5]" And bAzzero = True Then
        o.Text = ""
     Else If o.Name Like "TextBox[6,7]" And bAzzero = True Then
        o.Text = 0
     Else If o.Name Like "ComboBox" And bAzzero = True Then
        o.Index = -1
     Endif
    Endif
  Next
 

Offline luca.decarlo

  • Gamberetto
  • *
  • Post: 49
    • Mostra profilo
Re:Array di controlli
« Risposta #38 il: 13 Gennaio 2016, 11:57:36 »
Codice: [Seleziona]
If c.Name Like "TextBox[2,3,4,5]" And bAzzero = True Then
        c.Text = ""

...perché hai usato la parola chiave " Like " invece di " = " ?  ???

E' un errore??  Nelle pagine precedenti c'è questo esempio, ho preso spunto da li!

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #39 il: 13 Gennaio 2016, 12:08:44 »
Sì, ho visto, ma solitamente la parola " Like " prevede anche l'uso di caratteri speciali.

Prova a cambiare con il segno di uguale ( = ).
« 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.158
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #40 il: 13 Gennaio 2016, 12:11:14 »
Usare Like è corretto (più che corretto :D ) piuttosto occorre capirlo bene il tuo Like su ComboBox non può funzionare. Se intendi indicare tutte le combobox devi aggiungere un asterisco.
Devi studiare anche la differenza fra Controls e Children il primo scova tutti i controlli anche quelli annidati nei contenitori (controlli di controlli di controlli...) il secondo no e se vuoi leggerli devi annidare dei cicli per ogni contenitore.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #41 il: 13 Gennaio 2016, 12:37:28 »
Codice: [Seleziona]
"TextBox[2,3,4,5]"

Ah, ma hai utilizzato le parentesi quadre come appunto caratteri speciali per individuare quasiasi nome di TextBox che termina con uno di quei numeri.
L'uso è più che correto, allora.
« Ultima modifica: 13 Gennaio 2016, 12:51: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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #42 il: 13 Gennaio 2016, 14:21:23 »
... credo tu debba assegnare il tipo di controllo.
Se l'oggetto è un pulsante allora devi assegnare button e dovrebbe funzionare.

Nel caso tu voglia ricercare sempre tramite la proprietà nome e tu abbia anche la necessità di accedere a controlli annidati puoi usare il mio precedente suggerimento che credo funzioni:
Codice: [Seleziona]
Public Sub EnaDisa(bValue As Boolean, bAzzero As Boolean)
 
  Dim c As Control, o As Object
 
  For Each c In FSoggetti.Controls
    ' Dovrebbe andar bene anche qui'
    ' o = c
    '
    If c.Tag = 1 Then
     c.Enabled = bValue
     Print c.Name
     If c.Name Like "TextBox[2,3,4,5]" And bAzzero = True Then
        o = c
        o.Text = ""
     Else If c.Name Like "TextBox[6,7]" And bAzzero = True Then
       o = c
       o.Text = 0     
     Else If c.Name Like "ComboBox*" And bAzzero = True Then ' Se ti riferisci a tutte!'
       o = c
       o.Index = -1
     Endif
    Endif
  Next
 
End
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline luca.decarlo

  • Gamberetto
  • *
  • Post: 49
    • Mostra profilo
Re:Array di controlli
« Risposta #43 il: 14 Gennaio 2016, 14:22:33 »
Ritorno all'utilizzo del "Like" ma utilizza solo 1 carattre "variabile"??

Ovvero:

Codice: [Seleziona]
Dim o As Object
   For Each o In Me.Children
    If o.Tag = 1 Then
     o.Enabled = bValue
     If o.Name Like "TextBox[2,3,4,5,6,7,8,9,10,11,12,13]" And bAzzero = True Then
        o.Text = ""
     'Else If o.Name Like "TextBox[6,7]" And bAzzero = True Then
     '   o.Text = 0
     Else If o.Name Like "ComboBox*" And bAzzero = True Then
        o.Index = -1
     Endif
    Endif
  Next


Azzera solo fino alla textbox9 dalla 10 in poi nulla!


Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #44 il: 14 Gennaio 2016, 17:00:39 »
Guarda io di espressioni regolari ne so veramente poco, in giro per il web ci sono dei tutorial ...
Questo ad esempio funziona:
Codice: [Seleziona]
Public Sub Button1_Click()
 
  Dim c As Control
  Dim $OK As Boolean = True
 
  For Each c In FMain.Controls
   
    If c.Name Like "TextBox[2-9]" Or c.Name Like "TextBox[1][0-3]" And $OK = True Then
      c.Enabled = False
    Endif
   
  Next

End
A proposito:
A te il mio codice sulle combo funziona? Oppure fa come a vuott?

NB: Ho spostato la domanda sulla ComboBox qui
« Ultima modifica: 14 Gennaio 2016, 19:51:24 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro