Oppure

Loading
03/04/15 22:12
archemi
Ciao a tutti, ho un problema che mi sta facendo diventare matta.
Volevo mettere durante il caricamento della base dati uno splash screen di avviso
Ora vorrei metterlo al centro dello schermo ma niente...

il codice è questo:
Public Class frmUtilizzatori

    Private _SplashForm As New SplashForm

    Private Sub frmUtilizzatori_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Control.CheckForIllegalCrossThreadCalls = False
        Me.Hide()
        BackgroundWorker1.RunWorkerAsync()
        _SplashForm.ShowDialog()
    End Sub

    Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        accessoDati.caricaUtilizzatori(cbUtilizzatori)
    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        _SplashForm.Close()
        Me.Show()
    End Sub
End Class

Public Class SplashForm
    Inherits Form

    Private _Label As New Label With {.Dock = DockStyle.Fill, .Text = "ATTENDERE PREGO", .ForeColor = Color.White}

    Private Sub SplashForm_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Controls.Add(_Label)
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Me.Width = 200
        Me.Height = 50
        Me.StartPosition = FormStartPosition.CenterScreen
        Me.BackColor = Color.Green
    End Sub
End Class
aaa
04/04/15 9:10
Roby94
Premetto che non sono sicuro della risposta ma credo che il problema stia nel fatto che imposti la posizione di avvio quando il form è gia stato avviato.
Le modifiche potresti eseguirle direttamente dal editor visuale cosi andrebbero a finire direttamente nel file design del form, e all'avvio non avresti necessità di modificarne alcuna proprietà, come vedo che stai facendo.
aaa
07/04/15 8:35
archemi
Alla fine ho risolto chiamando un classico form parametrabile creato direttamente dal designer (così ho potuto gestire meglio la grafica).
Comunque non ho mica capito quale fosse il problema.

Grazie dell'aiuto!
aaa
07/04/15 15:30
Roby94
Visto che cosi hai risolto sono quasi certo che il problema fosse proprio quello che ti ho segnalato nel post precedente, l'IDE esegue l'inizializzazione dei componenti del form nel costrutto dello stesso, quindi prima di eseguirlo, per tanto la proprietà StartPosition viene presa in considerazione.
aaa
09/04/15 9:00
archemi
Ho risolto con il form parametrabile ma probabilmente avrei potuto anche modificarlo con le proprietà top e left

Me.Top = CInt((My.Computer.Screen.WorkingArea.Height \ 2) - (Me.Height \ 2))
        Me.Left = CInt((My.Computer.Screen.WorkingArea.Width \ 2) - (Me.Width \ 2))


Ho provato così per sfizio e il codice completo è:
Imports System.Threading

Public Class Form1

    Private _SplashForm As New SplashForm

    Private Sub form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Control.CheckForIllegalCrossThreadCalls = False
        Me.Hide()
        BackgroundWorker1.RunWorkerAsync()
        _SplashForm.ShowDialog()
    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        _SplashForm.Close()
        Me.Show()
    End Sub

    Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Thread.Sleep(2000)
    End Sub
End Class

Public Class SplashForm
    Inherits Form

    Private _Label As New Label With {.Dock = DockStyle.Fill, .Text = "ATTENDERE PREGO", .ForeColor = Color.White}

    Private Sub SplashForm_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Controls.Add(_Label)
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Me.Width = 200
        Me.Height = 50
        Me.BackColor = Color.Green
        Me.Top = CInt((My.Computer.Screen.WorkingArea.Height \ 2) - (Me.Height \ 2))
        Me.Left = CInt((My.Computer.Screen.WorkingArea.Width \ 2) - (Me.Width \ 2))
    End Sub
End Class
aaa
09/04/15 10:40
Roby94
Mi sembra che tu proprio non legga i post di risposta.
Va beh il problema è risolto direi che si può chiudere qui.
aaa
17/04/15 8:28
archemi
Come non leggo? l'ultimo post è il mio...

piccola considerazione:
"Le modifiche potresti eseguirle direttamente dal editor visuale" : non è stato letto il codice altrimenti non avrebbe senso una risposta del genere in quanto la seconda form è aperta da codice e non da editor visuale.

"per tanto la proprietà StartPosition viene presa in considerazione. " ... direi che è proprio l'opposto e il succo del problema, non viene presa in considerazione (neppure se la form che la apre è lei stessa in FormStartPosition.CenterScreen).

ps. per dovere di completezza ho spiegato come ho risolto, postato il codice, e ringraziato comunque per l'aiuto... poi se questo non basta, basta dirlo e mi cancello da sola dal forum
aaa
17/04/15 10:03
Ultimo
Postato originariamente da archemi:

Come non leggo? l'ultimo post è il mio...

piccola considerazione:
"Le modifiche potresti eseguirle direttamente dal editor visuale" : non è stato letto il codice altrimenti non avrebbe senso una risposta del genere in quanto la seconda form è aperta da codice e non da editor visuale.

"per tanto la proprietà StartPosition viene presa in considerazione. " ... direi che è proprio l'opposto e il succo del problema, non viene presa in considerazione (neppure se la form che la apre è lei stessa in FormStartPosition.CenterScreen).

ps. per dovere di completezza ho spiegato come ho risolto, postato il codice, e ringraziato comunque per l'aiuto... poi se questo non basta, basta dirlo e mi cancello da sola dal forum



non vi siete capiti ;)
If ok Then GOTO Avanza else GOTO Inizia