Picturebox con una serie di oggetti pulsanti.
Voglio identificarne uno tramite la proprietà .name.
se uso:
For Each hCon In Me.Controls
If hCon.text = "pippo" Then
hCon.Background = Color.red
Endif
Next
Mi dice chiaramente che .name non è una proprietà di control.
Non riesco a capire come aggirare l'ostacolo! :-\
:ciao:
Appunto.
In un linguaggio orientato agli Oggetti (quasi) tutto è un Oggetto, quale Particolare che partecipa delle caratteristiche formali di una Classe, ossia di un Universale. Universale qui nel senso che vale per tutte le individuali istanze concrete di quella Classe.
Guarda qui ad esempio:
Public Sub Main()
Dim ob As Object
Dim ii As Integer[] = [111, 2222, 33333, 444444]
Dim i As Integer
ob = ii
For Each i In ob
Print i
Next
End
Nel tuo programma la Classe Button potenzialmente può esprimere la proprietà .Text; cosa, questa, che verrà effettuata da vari Oggetti concreti, ossia i Button creati e posti in un Contenitore, all'interno di un'applicazione grafica.
Changing the colour of buttons does not work very well in Gambas.
To do something similar I would do it like this: -
Public Sub Form_Open()
Dim oObj As Object
For Each oObj In Me.Children
If Not IsNull(oObj.Text) Then
If oObj.text = "pippo" Then
oObj.Font.Bold = True
oObj.Font.Size = 14
End If
Endif
Next
End
Grazie Vuott e Cogier
@Vuott
mi da comunque un errore alla riga
If hCon.text = "pippo" Then
con questo messaggio:
Tipo non corrispondente:cercato numero,data o stringa, ottenuto VOID al suo posto...
Io mi rifaccio genericamente alle tue righe all'inizio postate.
Pongo ad esempio 4 Button, ciascuno con un testo alfanumerico nella rispettiva proprietà .Text.
Poi lancio il codice:
Public Sub Form_Open()
Dim cnt As Object
For Each cnt In Me.Controls
Print cnt.Text
Next
End
E funziona perfettamente.
Pertanto devi "filtrare" gli Oggetti da far verificare al IF.
Facciamo un semplice esempio pratico.
Su un Form poniamo una PictruBox, sulla quale poniamo due Button.
Nell'IDE attribuiamo alla proprietà .Text del primo Button la stringa "kicco", mentre a quella del secondo la stringa "seveso".
Poi lanciamo in modalità passo-dopo-passo (F8) il seguente codice e vediamo come si comporta e cosa viene scritto in console:
Public Sub Form_Open()
Dim cnt As Object
For Each cnt In FMain.Controls
Print cnt.Name
If cnt = PictureBox1 Then Continue
Print cnt.text
If cnt.text = "kicco" Then Print "trovato !"
Next
End
:ciao:
Ho usato
If Str(hCon.text) = "c1" Then
e funziona!
:2birre:
e da queste parti la birra va a fiumi!!!!
Si hai ragione.
Un modo per poter filtrare credo è questo:
Public Sub Form_Open()
Dim obj As Object
Button1_Click
For Each obj In Me.Controls
If object.Type(obj) = "Button" Then
If obj.Text = "Lilla" Then obj.Background = Color.Blue
Endif
Next
End
Avevo scritto delle cavolate, occorre sempre pensare che se gli oggetti sono all'interno di un contenitore, automaticamente diventano figli del contenitore.
Ora vedo se con una bella tazzona di caffè mi sveglio ;D