Autore Topic: [Risolto]Gruppi di controlli  (Letto 2680 volte)

Offline Cri

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
[Risolto]Gruppi di controlli
« il: 22 Febbraio 2010, 14:12:45 »
Salve!
Chiedo scusa per la niubbiaggine; ho cercato sul forum e sul wiki, ma non sono riuscita a trovare niente che mi sveli il modo di fare ciò che vorrei.
Ho un gruppo di controlli (10 Button) per i quali vorrei settare alcune proprietà (ad esempio il colore di background), prendendo i valori da un array di 10 elementi (uno per controllo). Non vorrei fare 10 assegnamenti in cascata :o, preferirei usare un for, ma... non ho capito come indicizzare i dieci controlli!
Mi aiutate?
« Ultima modifica: 24 Febbraio 2010, 05:37:46 da Cri »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Gruppi di controlli
« Risposta #1 il: 22 Febbraio 2010, 14:36:01 »
Se i tupi button hanno come group, ad esempio, Button allora devi fdare così:

Codice: [Seleziona]
  i = 0
  FOR EACH hcontrol IN ME.Children
    'se il tipo l'oggetto è un Button
    IF Object.Type(hcontrol) = "Button" THEN
      'imposto il background
      hcontrol.background = Color.Red
      INC i
    ENDIF   
  NEXT

Ricorda di definire i nella sub in cui usi questo codice e hcontrol AS Object

Offline Cri

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: Gruppi di controlli
« Risposta #2 il: 22 Febbraio 2010, 14:52:15 »
Ti ringrazio per la competenza, la gentilezza e la velocità!
Funziona perfettamente!
Edit... mi sembrava funzionasse, ma invece non va.... I colori restano quelli che erano...
Ora provo col debug a capire che fa....

Edit: col debug mi pare di aver capito che:
Codice: [Seleziona]
Object.Type
come del resto suggerisce il nome, non contiene il gruppo di appartenenza dell'oggetto in esame, ma il tipo (button, label...);
per cui l'espressione dell'IF:
Codice: [Seleziona]
Object.Type(hcontrol) = "Button" 
risulta vera per tutti i Button della form, e non solo per quelli appartenenti al gruppo.
Bisognerebbe che:
  • o riuscissi a restringere il FOR .. EACH ai soli elementi del gruppo (soluzione a mio parere più elegante e pulita)
  • o con l'IF interno riuscissi a selezionare solo gli elementi del gruppo
« Ultima modifica: 22 Febbraio 2010, 15:24:39 da Cri »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Gruppi di controlli
« Risposta #3 il: 22 Febbraio 2010, 15:49:06 »
Spero di non dispiacere a Ceskho se prendo parte alla discussione.
Metti i pulsanti dentro un contenitore del tipo frame o panel e raggruppali come hai fatto prima. Così l'array è limitato solamente ai pulsanti del nuovo oggetto.
Ciao.
:ciao:

Offline Cri

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: Gruppi di controlli
« Risposta #4 il: 22 Febbraio 2010, 15:56:37 »
Anche io avevo pensato a qualche cosa del genere... però mi sembra comunque una soluzione che aggira il problema, invece di affrontarlo di petto.
Non posso indicizzare dei controlli in base al loro appartenere ad un gruppo?

Offline Cri

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: Gruppi di controlli
« Risposta #5 il: 22 Febbraio 2010, 17:04:21 »
C'è poi un altro problema. Leggo infatti a pag. 55 di 'A Beginner's Guide to GAMBAS', a proposito dell'istruzione FOR EACH:
Citazione
The  FOR  EACH  statement   executes  a  loop while simultaneously enumerating an object. The  Expression must be a reference to an enumerable object such as a collection or an array. The order of enumeration in not necessarily predictable. 

Invece io ho bisogno di fare:
  • il primo Button ->Bianco
  • il secondo  ->Rosso
  • il terzo -> Verde chiaro
  • il quarto -> fuxia
  • il quinto -> giallo
  • e così via... chi ha figli frequentanti le elementari, forse capisce cosa ho intenzione di fare  ;D...
Quindi devo assegnare alla proprietà background di ogni Button un ben determinato colore, diverso da tutti gli altri, e seguendo un ordine preciso.
Invece dalla guida sembrerebbe di capire che non è predicibile l'ordine in cui vengono restituiti i controlli, il che mi assegnerebbe i colori in modo random ai vari controlli.
Come devo fare?
Grazie a tutti per l'aiuto e l'interessamento!

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Gruppi di controlli
« Risposta #6 il: 22 Febbraio 2010, 17:08:57 »
Anche io avevo pensato a qualche cosa del genere... però mi sembra comunque una soluzione che aggira il problema, invece di affrontarlo di petto.
Non posso indicizzare dei controlli in base al loro appartenere ad un gruppo?


Devi capire che purtroppo non ho la sfera magica e devo studiare il caso in base a ciò che mi dici e alle informazioni che mi dai...pertanto il tuo problema è facilmente aggirabile poichè basta inserire un if nel ciclo.

IF hcontrol.grup = "pincopallino" THEN .....

Quindi il codice in toto diventa:

Codice: [Seleziona]
 i = 0
  FOR EACH hcontrol IN ME.Children
    'se il tipo l'oggetto è un Button
    IF Object.Type(hcontrol) = "Button" THEN
      'imposto il background
      IF hcontrol.group = "gruppo_tuo_nuovo" THEN hcontrol.background = Color.Red
      INC i
    ENDIF   
  NEXT

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Gruppi di controlli
« Risposta #7 il: 22 Febbraio 2010, 17:24:58 »
@ cri

Scusa ma il tuo ultimo messaggio mi era sfuggito (colpa dl pane e nutella!!!  :P)

Dunque...il tuo problema è semplicissimo da risolvere. Il tutto consiste nel creare all'inizio un array di colori ed ad ogni indici associ un colore diverso. In questo modo mediante la i che usi per il ciclo EACH puoi richiamarti i colori dell'array....

Se hai ancora dubbbi chiedi pure...non dovrebbe essere difficile... ;)

Offline Cri

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: Gruppi di controlli
« Risposta #8 il: 22 Febbraio 2010, 17:40:20 »
Grazie!
Dunque, vi dico il punto a cui sono:
di testare hcontrol.group ci avevo provato anche io, solo che ottengo a run time il messaggio di errore:
Citazione
Unknow symbol 'group' in class 'Button'
avevo provato a testare anche  object.group(hcontrol); ottengo lo stesso errore.
l'array di colori ce l'ho, ovviamente indicizzato da i; il problema è comunque che se i controlli mi vengono restituiti dal FOR EACH in modo random, non sono sicura di attribuire ai controlli i colori giusti (al primo il bianco, al secondo il rosso...)
Non mi arrendo però... non voglio fare 10 assegnamenti in cascata!
« Ultima modifica: 22 Febbraio 2010, 17:45:26 da Cri »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Gruppi di controlli
« Risposta #9 il: 22 Febbraio 2010, 17:53:31 »
in che modo lo controlli il gruppo? postami il codice per favore...

E poi tieni presente che devi impostarlo tu il Group
« Ultima modifica: 22 Febbraio 2010, 17:56:50 da Ceskho »

Offline Cri

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: Gruppi di controlli
« Risposta #10 il: 22 Febbraio 2010, 18:22:01 »
Ho risolto (non molto elegantemente, lo so), in questo modo:
poiché i controlli del gruppo hanno nome n0,n1,n2...
ho assegnato il colore di background in questo modo:

Codice: [Seleziona]
hcontrol.background = .Colori[CInt(Right(hcontrol.name, Len(hcontrol.Name) - 1))]

@Ceskno:  cosa intendi con:
in che modo lo controlli il gruppo?

Il gruppo l'ho impostato attribuendo come proprietà Group lo stesso nome (tramite ToolBox, non col codice). Devo fare dell'altro?
Grazie ancora!

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Gruppi di controlli
« Risposta #11 il: 23 Febbraio 2010, 00:27:17 »
Citazione
Il gruppo l'ho impostato attribuendo come proprietà Group lo stesso nome (tramite ToolBox, non col codice). Devo fare dell'altro?
Grazie ancora!

No no..era ciò che volevo sapere...

Offline Cri

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: Gruppi di controlli
« Risposta #12 il: 23 Febbraio 2010, 06:25:10 »
Indipendentemente dal fatto che abbia risolto, ( ho sfruttato il fatto che i nomi dei controlli sono formati dalla stringa "n"&<numero progressivo>, convertendo in int il numero progressivo e utilizzandolo come indice) mi piacerebbe sapere se c'è un modo più elegante per lavorare su tutti i controlli di un gruppo, avendo a disposizione un indice che individui in modo univoco ogni controllo all'interno del gruppo.
Ho capito che non si deve fare confronti col VB, perché Gambas è un'altra cosa; voglio precisare che non sono assolutamente nostalgica di win e microsoft (tra l'altro è una decina d'anni che non metto più le mani su VB) ma ricordo che con gli array di controlli questo poteva essere fatto.

Grazie a tutti per l'attenzione e l'aiuto.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Gruppi di controlli
« Risposta #13 il: 23 Febbraio 2010, 07:30:01 »
Gambas (purtroppo) non ha le matrici di controlli per cui le modifiche/impostazioni a gruppi di essi devono essere fatte ricorrendo a qualche escamotage del codice.

Visita il mio sito personale: http://www.leonardomiliani.com

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Gruppi di controlli
« Risposta #14 il: 23 Febbraio 2010, 08:12:12 »
@Cri

puoi usare la proprieta' tag del button...
ti allego un piccolo esempio.