Domanda:
Come si può fare in visual basic, quando si richiama un form durante l'esecuzione, mettere degli oggetti?
Claudio
2009-10-24 12:14:13 UTC
in modo dinamico?
esempio:
creo un programma che dato un numero dall'utente mi crea un form nuovo con tanti bottoni quanto vale il numero inserito dall'utente.
Tre risposte:
?
2009-10-26 11:44:39 UTC
Dovresti scrivere che versione di visual basic usi perchè il modo per ottenere il risultato che cerchi cambia radicalmente.

Per quanti riguarda Visual Basic .NET (versione 2003, 2005, 2008 e presto 2010) si puo fare cosi:

Crea un nuovo progetto, nel form1 inserisci un button e poi copia questo codice, cancellando quello creato automaticamente.



Public Class Form1

Private nPulsanti As Integer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

'chiedo quanti pulsanti inserire

nPulsanti = InputBox("Inserisci il numero di pulsanti", "Prova")

'creo un nuovo form vuoto

Dim f As New System.Windows.Forms.Form

'imposto alcune proprietà

f.Width = 400

f.Height = 400

f.StartPosition = FormStartPosition.CenterScreen

f.Text = "Questa è una prova"

'aggiungo un gestore degli eventi per gli eventi load e close del form

AddHandler f.Load, AddressOf FormLoad

AddHandler f.FormClosing, AddressOf FormClose

'visualizzo il form

f.Show()



Catch ex As Exception

MsgBox(ex.Message)

End Try





End Sub

Private Sub FormLoad(ByVal sender As Object, ByVal e As EventArgs)

Try

'credo n bottoni

For n = 1 To nPulsanti

'creo un nuovo button

Dim b As New Button

'imposto il nome

b.Text = "Pulsante " & n

'imposto la posizione e la dimensione (chiaramente devi calcolare la posizione in base alla dimensione)

b.Left = 20

b.Width = 60

b.Height = 60

b.Top = 20 + ((n - 1) * 80)

'per poter gestire l'evento click del button bisogna inserire un gestore degli eventi

AddHandler b.Click, AddressOf buttonClick

'inserisco il button all'interno del form

CType(sender, Form).Controls.Add(b)

Next

Catch ex As Exception

MsgBox(ex.Message)

End Try



End Sub

'gestore degli eventi per l'evento formclosing del form

Private Sub FormClose(ByVal sender As Object, ByVal e As FormClosingEventArgs)

Try

'tolgo i gestori degli eventi inseriti

RemoveHandler CType(sender, Form).Load, AddressOf FormLoad

RemoveHandler CType(sender, Form).FormClosing, AddressOf FormClose

For Each b As Control In CType(sender, Form).Controls

If TypeOf (b) Is Button Then

RemoveHandler b.Click, AddressOf ButtonClick

End If

Next

Catch ex As Exception

MsgBox(ex.Message)

End Try



End Sub



'gestore degli eventi per l'evento click del pulsante

Private Sub ButtonClick(ByVal sender As Object, ByVal e As EventArgs)

Try

MsgBox("Ciao mondo", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, CType(sender, Button).Text)

Catch ex As Exception

MsgBox(ex.Message)

End Try





End Sub

End Class



Per quanti riguarda VB6 il procedimento è più macchinoso ma comunque possibile, bisogna creare un lista di commandbutton non visibile, carica n pulsanti con il comando Load nomepulsante(n), impostare le proprietà di visualizzazione (posizione e dimensione) e mettere la proprietà "visible" del pulsante creato uguale a True. Mi spiace ma vb6 non ce l'ho sottomano quindi niente codice.



Ciao
Ciao7310
2009-10-25 03:42:23 UTC
Sinceramente me lo ero chiesto anch'io come fare ste cose con più form
anonymous
2009-10-25 03:26:03 UTC
Questo è facile con bluej e java, infatti con java non c'è problema a creare oggetti e finestre strada facendo (run time).

Per quanto riguarda vb6, ricordo che quando usavo vb6, c'era la schiavitù dei drivers....

cioè ero obbligato ad usare le ocx e dll nella quale microsoft (spazzolino da denti) imponeva i suoi diritti giuridici.



1000 discorsi potrei fare, ma ho il tempo di farne soltanto uno:..

Ricordo che volevo controllare tutti i pixel di un form e usando "pos" o "pset" (non ricordo bene) ci voleva 3 quarti d'ora per controllare i pixel uno per uno e sapere che colore avevano (ed inoltre andava in tilt).

Ma se usavo il drivers di microsoft (spazzolino da denti), allora subito in 2 secondi faceva il controllo di tutti i pixel del form.

Ma se uso i loro drivers allora cado nei diriggi giuridici di quei drivers.



Non c'è dubbio che microsoft ha messo dei cicli di ritardo per invogliarti ad usare i loro drivers e schiavizzare il tuo cervello, come non c'è dubbio che microsft piglia per kulo la gente.



Prima avevo windows Xp e vedevo tutte le immagini anteprima di tutti i video, adesso con vista vedo solo le anteprima dei file wmv cioè quei file codificate con il sistema microsoft spazzolino da denti.


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...