PDA

View Full Version : [VB.NET] caricamento form


Hactor
16-06-2009, 18:12
Qualcuno sa come si fa a costruire un loader con visual basic?
In poche parole vorrei che quando si clicca su un certo pulsante venga avviato il caricamento di un determinato form, mostrandolo in una barra di caricamento (insomma la classica progressbar, presente in VB.net) e appena quando è pronto venga lanciato.

MarcoGG
16-06-2009, 21:16
Qualcuno sa come si fa a costruire un loader con visual basic?
In poche parole vorrei che quando si clicca su un certo pulsante venga avviato il caricamento di un determinato form, mostrandolo in una barra di caricamento (insomma la classica progressbar, presente in VB.net) e appena quando è pronto venga lanciato.

E' semplice, a patto di avere informazioni precise su cosa vada caricato nella Form lanciata ( chiamiamola Form2 ). Se l'operazione nel Load della Form2, o comunque in un metodo "di apertura", è un ciclo, è possibile agganciare la progressbar al contatore, o in altri casi usare una progressbar d'attesa generica ( Style = Marquee ).
Basterà impostare Opacity = 0 a design su Form2, e risettarlo via codice al suo default = 100 a caricamento completato...
Tecniche ce ne sono diverse, dipende da come lo vuoi realizzare.

Hactor
17-06-2009, 09:29
E' semplice, a patto di avere informazioni precise su cosa vada caricato nella Form lanciata ( chiamiamola Form2 ). Se l'operazione nel Load della Form2, o comunque in un metodo "di apertura", è un ciclo, è possibile agganciare la progressbar al contatore, o in altri casi usare una progressbar d'attesa generica ( Style = Marquee ).
Basterà impostare Opacity = 0 a design su Form2, e risettarlo via codice al suo default = 100 a caricamento completato...
Tecniche ce ne sono diverse, dipende da come lo vuoi realizzare.

un form, chiamiamolo Form2 andrebbe lanciato al click di un pulsante.
Vorrei che partisse un loading e poi il form caricato.

Nello stile

Private Sub button1_click(...)
Dim form_da_lanciare As New Form2
...

...
form_da_lanciare.ShowDialog()
End Sub


Come fare?

MarcoGG
17-06-2009, 14:33
Private Sub button1_click(...)
Dim form_da_lanciare As New Form2
...

...
form_da_lanciare.ShowDialog()
End Sub


Come fare?

Se la progressbar sta su Form1 dovrai prima cambiare qualcosa nelle proprietà di progetto > disabilitare "Attiva framework applicazione".
A questo punto in un modulo o classe statica, definire il metodo Sub Main e impostare tale metodo come Oggetto di Avvio.

Esempio ( come processo "oneroso" nel Load della Form2 popolo una ComboBox... ) :

1. Modulo ( classe statica ) :
Public Frm1 As Form1
Public Frm2 As Form2

Public Sub Main()

Application.EnableVisualStyles()
Frm1 = New Form1
Application.Run(Frm1)

End Sub

2. Pulsante su Form1 :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Frm2 = New Form2
Frm2.Show()

End Sub

3. Form2 ( Opacity a design è = 0 ) :
Dim i As Integer = 0
Dim numCicli As Integer = 200

Frm1.ProgressBar1.Minimum = i
Frm1.ProgressBar1.Value = Frm1.ProgressBar1.Minimum
Frm1.ProgressBar1.Maximum = numCicli

For i = 1 To numCicli
ComboBox1.Items.Add("elemento_" & i)
System.Threading.Thread.Sleep(10)

Frm1.ProgressBar1.Value = i
Next i
Me.Opacity = 100

Se invece la progressbar è su Form2, sarà analogo, rendendo invisibili tutti gli altri controlli durante il caricamento e lasciando Opacity a 100... ;)

Hactor
17-06-2009, 16:12
Se la progressbar sta su Form1 dovrai prima cambiare qualcosa nelle proprietà di progetto > disabilitare "Attiva framework applicazione".
A questo punto in un modulo o classe statica, definire il metodo Sub Main e impostare tale metodo come Oggetto di Avvio.

Esempio ( come processo "oneroso" nel Load della Form2 popolo una ComboBox... ) :

1. Modulo ( classe statica ) :
Public Frm1 As Form1
Public Frm2 As Form2

Public Sub Main()

Application.EnableVisualStyles()
Frm1 = New Form1
Application.Run(Frm1)

End Sub

2. Pulsante su Form1 :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Frm2 = New Form2
Frm2.Show()

End Sub

3. Form2 ( Opacity a design è = 0 ) :
Dim i As Integer = 0
Dim numCicli As Integer = 200

Frm1.ProgressBar1.Minimum = i
Frm1.ProgressBar1.Value = Frm1.ProgressBar1.Minimum
Frm1.ProgressBar1.Maximum = numCicli

For i = 1 To numCicli
ComboBox1.Items.Add("elemento_" & i)
System.Threading.Thread.Sleep(10)

Frm1.ProgressBar1.Value = i
Next i
Me.Opacity = 100

Se invece la progressbar è su Form2, sarà analogo, rendendo invisibili tutti gli altri controlli durante il caricamento e lasciando Opacity a 100... ;)


ci provo subito, grazie, ti faccio sapere :D