Vi rappresento uno strano fenomeno che ho riscontrato facendo alcune prove con l'oggetto "Balloon".
Su un Form ho posto una semplice TextEdit. Poi ho scritto le seguenti righe di codice:
Public Sub TextEdit1_Enter()
Balloon.Info("Testo qualsiasi", Form)
End
Come è possibile vedere, volendo far apparire il Balloon sul Form, ho posto come nome del Controllo (al quale legare il Balloon) non la parola FMain, né Me; bensì proprio Form.
Ebbene, se, lanciando il progetto e aprendosi il Form, il puntatore del mouse si trova casualmente all'interno della TextEdit, si scatena ovviamente subito l'evento previsto nel codice e... compare - seppur ridimensionato - un altro Form, avente lo stesso nome del Form principale !
???
Questa cosa accade anche se faccio entrare due volte consecutivamente il puntatore del mouse all'interno della TextEdit.
Aggiungo un altro fenomeno paranormale: se all'interno della routine dell'evento _Enter() prevedo la dichiarazione ed istanziazione di un oggetto qualsiasi, con proprio genitore il Form:
Public Sub TextEdit1_Enter()
Dim bt As Button
With bt = New Button(Form)
.Y = 300
.W = 100
.H = 50
.Caption= "Alibabà"
End With
Balloon.Info("Testo qualsiasi", Form)
End
ebbene, nel nuovo Form vedo generato quell'oggetto !
Aggiungo che:
1) se, invece di scrivere l'evento riferito alla TextEdit, pongo l'evento _Enter con riferimento al Form:
Public Sub Form_Enter()
Balloon.Info("Testo qualsiasi", Form)
End
allora basterà entrare una volta soltanto con il mouse all'interno del Form del programma, perché si generi - oltre al previsto Ballon - il nuovo Form ridimensionato.
2) se pongo questo codice:
Private bt As Button
Public Sub Form_Open()
With bt = New Button(Form)
.W = 100
.H = 100
.Caption = "Alibabà"
End With
End
Public Sub Form_Enter()
Balloon.Info("testo qualsiasi", Form)
End
lanciando il programma, il Form del programma medesimo non presenta il Button istanziato nella routine di apertura del Form del progetto. Entrando, successivamente, con il mouse sul Form del programma, viene generato - come ormai è chiaro - un secondo Form ridimensionato, all'interno del quale è presente quel Button !
:rolleyes:
Probabilmente L'oggetto form e' statico... provate a fare questo in un modulo che sia impostato come classe di avvio:
Public Sub Main()
Form.Show
End
Ebbene senza essere istanziata si aprira' un form...
Volevo aggiungere che, pur non volendo scomodare un modulo, si avrà il medesimo risultato:
Public Sub Form_Open()
Form.Show
End
Senza dover impostare un modulo, si può creare, alla bisogna (immaginate ad esempio per creare con poco codice un MessageBox personalizzato), velocemente un Form, distruttibile egualmente in modo veloce:
Private bt As Button
Public Sub Button1_Click()
Dim tl As TextLabel
With Form
.Show
.Center
.W = 400
.H = 300
.Background = Color.Yellow
.Caption = "Nuovo Form ausiliario"
End With
With tl = New TextLabel(Form)
.X = 200
.Y = 200
.W = 100
.H = 50
.Background = Color.Orange
.Text = "alibaba"
End With
With bt = New Button(Form) As "tasto"
.X = 20
.Y = 20
.W = 100
.H = 50
.Caption = "alibaba"
End With
End
Public Sub tasto_Click()
Print "Il Form ausiliario sarà distrutto fra 2 secondi !"
Wait 2
Form.Close
End