Autore Topic: Array di controlli  (Letto 3266 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #15 il: 16 Dicembre 2015, 14:43:22 »
ottengo errore su grp1 che non esiste.
Hai dichiarato e creato preliminarmente quella variabile grp1 ?
« 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.157
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #16 il: 16 Dicembre 2015, 15:05:27 »
Sono arrivato al momento di definire nel campo group dei controlli interessati al test il valore grp1

poi nello specifico eseguo:

Codice: [Seleziona]
For Each oControl In grp1
    oControl.Enabled = True
Next

Chiaramente oControl è definito come Objects, ma ottengo errore su grp1 che non esiste.

Ricordati che gli oggetti prima di poter essere usati devono essere istanziati .
NomeOggetto = New ecc., leggi anche questo
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 #17 il: 17 Dicembre 2015, 09:27:13 »
Grazie Gianluigi,

sto studiando il materiale che mi hai indicato, mi perdo sempre per strada, ovvero tutti gli esempi sono su oggetti che vengono creati da codice, non riesco a trovare la connessione tra questi appena detti e quelli invece creati da ide.

Ho delle form piene di TextBox e le nel campo group ci metto in tutte lo stesso nome, ora da codice devo abilitarle o disabilitarle tutte.

Con vb6 avevo un indice di controlli e facevo un semplice for dallo 0 all'indice massimo e via!


Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #18 il: 17 Dicembre 2015, 11:14:08 »
Grazie Gianluigi,

sto studiando il materiale che mi hai indicato, mi perdo sempre per strada, ovvero tutti gli esempi sono su oggetti che vengono creati da codice, non riesco a trovare la connessione tra questi appena detti e quelli invece creati da ide.

Ho delle form piene di TextBox e le nel campo group ci metto in tutte lo stesso nome, ora da codice devo abilitarle o disabilitarle tutte.

Con vb6 avevo un indice di controlli e facevo un semplice for dallo 0 all'indice massimo e via!

Non sono sicuro di aver compreso quello che mi stai chiedendo, non confondere gli eventi con le proprietà se devi disabilitare alcune textbox di una maschera che siano già disegnate dall'ide o disegnate dal codice poco importa ad esempio:
Codice: [Seleziona]
Public Sub Button1_Click()
 
  Dim c As Control
 
  For Each c In FMain.Controls
   
    If c.Name Like "TextBox[1,3,5]" Then
      c.Enabled = False
    Endif
   
  Next

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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #19 il: 17 Dicembre 2015, 14:14:59 »
Come già ti ha precisato Gianluigi, il Gruppo (group) è afferente alla sola sollevazione degli Eventi: tutti gli oggetti che appartengono ad un Gruppo potranno sollevare quel determinato Evento, facente riferimento nel codice alla sua sub-routine (sottoprocedura).
Codice: [Seleziona]
Public Sub NomedelGruppo_Click()

   Print Last.Name; " ha sollevato questo evento _Click() ! "

End

Ti segnalo questa pagina della nostra WIKI:
http://www.gambas-it.org/wiki/index.php?title=Gli_eventi


Riguardo, poi, al tuo problema di disattivare due o più oggetti di tipo TextBox, qualora sul Form vi siano solo TextBox, puoi anche più semplicemente fare così:
Codice: [Seleziona]
Public Sub Form_Open()

  Dim tb As TextBox
 
' Per ciascun "TextBox" presente sul Form corrente...
     For Each tb In Me.Children
' ...viene assegnato il valore False alla proprietà .Enabled:
       tb.Enabled = False
    Next

End
« Ultima modifica: 17 Dicembre 2015, 14:17:32 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.157
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #20 il: 17 Dicembre 2015, 16:34:31 »
@vuott
come chiesto da luca.decarlo il codice che hai postato agisce su tutte le textbox e come hai sottolineato funziona solo se sulla form hai messo unicamente TextBox, per questa ragione credo sia il caso di approfittare della proprietà Tag; ad esempio  si possono selezionare tutte le textbox interessate e impostare tag ad 1 in un colpo solo quindi:
Codice: [Seleziona]
Public Sub Button1_Click()
 
  Dim c As Control
 
  For Each c In FMain.Controls   
   
    If c.Tag = 1 Then c.Enabled = False     
 
  Next

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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #21 il: 17 Dicembre 2015, 16:47:43 »
..... funziona solo se sulla form hai messo unicamente TextBox, per questa ragione credo sia il caso di approfittare della proprietà Tag
L'uso della proprietà .Tag è una possibilità, sì.
Però si può anche evitare di scomodare questa proprietà, verificando invece il tipo di oggetto-Figlio presente sul Form.

Nell'esempio che segue sul Form abbiamo oltre ad alcune TextBox anche altri oggetti. Per individuare e, quindi, disabilitare soltanto le TextBox, possiamo adottare la seguente soluzione:
Codice: [Seleziona]
Public Sub Form_Open()

  Dim ob As Object
 
' Per ogni oggetto-figlio presente sul Form corrente...
    For Each ob In Me.Children
' ...verifichiamo il suo "tipo".  SE l'oggetto è una "TextBox", allora - e solo in tal caso - la disabilitiamo:
      If Object.Type(ob) = "TextBox" Then ob.Enabled = False
    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.157
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #22 il: 17 Dicembre 2015, 16:59:27 »
E perché non così? (sempre nel ciclo):
Codice: [Seleziona]
If Left(c.Name, 7) = "TextBox" Then c.Enabled = False
:ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #23 il: 17 Dicembre 2015, 17:10:09 »
E perché non così?

....sai meglio di me che spesso nella programmazione esistono molti modi per dare soluzione ad un problema....

Codice: [Seleziona]
Public Sub Form_Open()
 
  Dim c As Control
 
' Per ogni Controllo posto nel Form...
  For Each c In FMain.Controls
' ...se detto Controllo appartiene alla Classe "TextBox", allora lo disabilitiamo:
   If Object.Is(c, "Textbox") Then c.Enabled = False
 
  Next

End
    ;D
« 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.157
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #24 il: 17 Dicembre 2015, 17:18:59 »
 :rotfl:

Basta mi arrendo ho esaurito le idee che poi non andavano molto oltre la proprietà name.  :D

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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #25 il: 17 Dicembre 2015, 18:56:16 »
Basta mi arrendo .....

Adesso usando i Puntatori, penetro nella memoria di ciascun oggetto posto sul Form, individuando il nome della propria Classe.... così t'affondo la Corazzata:    :rotfl:

Codice: [Seleziona]
Public Sub Form_Open()

  Dim ob As Object
  Dim p1, p2 As Pointer

   For Each ob In Me.Children
     p1 = Object.Address(ob)
     p2 = Pointer@(p1)
     if String@(Pointer@(p2 + 24)) = "TextBox" then ob.Enabled = False
   Next

End

« Ultima modifica: 17 Dicembre 2015, 18:56:59 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.157
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #26 il: 17 Dicembre 2015, 22:17:33 »
Sono uscito tranquillo perché mi ero arreso e tu malgrado questo  mi hai affondato la corazzata!  >:(
Mi appello alla convenzione di Ginevra (quella gnocca coi capelli rossi) perderai la guerra a tavolino.  :nonono:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Array di controlli
« Risposta #27 il: 08 Gennaio 2016, 12:27:40 »
sollecitare vuott che ne capisce (ma anche altri se credono, penso a Sotema, Milio...)  a sforzarsi di spiegare a noi semplici “programmatori orientati agli eventi” un po meglio di quanto qui è stato fatto fino a oggi, un modo semplice e comprensibile per instradarci ad usare efficacemente gli oggetti (le classi) al posto delle strutture.
Credo che questa pagina possa dare una risposta:
http://www.gambas-it.org/wiki/index.php?title=Variabile_del_tipo_di_una_Classe_specifica_creata
« 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 #28 il: 13 Gennaio 2016, 10:26:51 »
Dopo le vostre spiegazioni ho una subbettina che funzione perfettamente, che, in base ad un valore bool che gli passo abilita o disabilita i controlli che mi interessano.

Ora provavo ad implementarla, visto che fa già un ciclo sui controlli del form, passando un'altro bool, facendogli azzerare il valore del controllo.

es:
Codice: [Seleziona]
Public Sub EnaDisa(bValue As Boolean, bAzzero As Boolean)
 
  Dim c As Control
 
  For Each c In FSoggetti.Controls
   
    If c.Tag = 1 Then
     c.Enabled = bValue
     Print c.Name
     If c.Name Like "TextBox[2,3,4,5]" And bAzzero = True Then
        c.Text = ""
     Else If c.Name Like "TextBox[6,7]" And bAzzero = True Then
        c.Text = 0
     Else If c.Name Like "ComboBox" And bAzzero = True Then
        c.Index = -1
     Endif
    Endif
  Next
 
End

nella line c.Text = "" ottendo un errore: "Unknow symbol 'Text' in class Control"

Luca

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:Array di controlli
« Risposta #29 il: 13 Gennaio 2016, 10:39:13 »
Sto facendo una cosa che non posso mollare, ma credo tu debba assegnare il tipo di controllo.
Se l'oggetto è un pulsante allora devi assegnare button e dovrebbe funzionare.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro