Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - StartPosition di una form non in CenterScreen
Forum - C# / VB.NET - StartPosition di una form non in CenterScreen

Avatar
archemi (Normal User)
Pro


Messaggi: 70
Iscritto: 08/01/2014

Segnala al moderatore
Postato alle 0:12
Sabato, 04/04/2015
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:
Codice sorgente - presumibilmente VB.NET

  1. Public Class frmUtilizzatori
  2.  
  3.     Private _SplashForm As New SplashForm
  4.  
  5.     Private Sub frmUtilizzatori_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  6.         Control.CheckForIllegalCrossThreadCalls = False
  7.         Me.Hide()
  8.         BackgroundWorker1.RunWorkerAsync()
  9.         _SplashForm.ShowDialog()
  10.     End Sub
  11.  
  12.     Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
  13.         accessoDati.caricaUtilizzatori(cbUtilizzatori)
  14.     End Sub
  15.  
  16.     Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
  17.         _SplashForm.Close()
  18.         Me.Show()
  19.     End Sub
  20. End Class
  21.  
  22. Public Class SplashForm
  23.     Inherits Form
  24.  
  25.     Private _Label As New Label With {.Dock = DockStyle.Fill, .Text = "ATTENDERE PREGO", .ForeColor = Color.White}
  26.  
  27.     Private Sub SplashForm_Load(sender As Object, e As System.EventArgs) Handles Me.Load
  28.         Controls.Add(_Label)
  29.         Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
  30.         Me.Width = 200
  31.         Me.Height = 50
  32.         Me.StartPosition = FormStartPosition.CenterScreen
  33.         Me.BackColor = Color.Green
  34.     End Sub
  35. End Class


PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 11:10
Sabato, 04/04/2015
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.

PM Quote
Avatar
archemi (Normal User)
Pro


Messaggi: 70
Iscritto: 08/01/2014

Segnala al moderatore
Postato alle 10:35
Martedì, 07/04/2015
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!

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:30
Martedì, 07/04/2015
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.

PM Quote
Avatar
archemi (Normal User)
Pro


Messaggi: 70
Iscritto: 08/01/2014

Segnala al moderatore
Postato alle 11:00
Giovedì, 09/04/2015
Ho risolto con il form parametrabile ma probabilmente avrei potuto anche modificarlo con le proprietà top e left

Codice sorgente - presumibilmente Plain Text

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



Ho provato così per sfizio e il codice completo è:
Codice sorgente - presumibilmente VB.NET

  1. Imports System.Threading
  2.  
  3. Public Class Form1
  4.  
  5.     Private _SplashForm As New SplashForm
  6.  
  7.     Private Sub form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  8.         Control.CheckForIllegalCrossThreadCalls = False
  9.         Me.Hide()
  10.         BackgroundWorker1.RunWorkerAsync()
  11.         _SplashForm.ShowDialog()
  12.     End Sub
  13.  
  14.     Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
  15.         _SplashForm.Close()
  16.         Me.Show()
  17.     End Sub
  18.  
  19.     Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
  20.         Thread.Sleep(2000)
  21.     End Sub
  22. End Class
  23.  
  24. Public Class SplashForm
  25.     Inherits Form
  26.  
  27.     Private _Label As New Label With {.Dock = DockStyle.Fill, .Text = "ATTENDERE PREGO", .ForeColor = Color.White}
  28.  
  29.     Private Sub SplashForm_Load(sender As Object, e As System.EventArgs) Handles Me.Load
  30.         Controls.Add(_Label)
  31.         Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
  32.         Me.Width = 200
  33.         Me.Height = 50
  34.         Me.BackColor = Color.Green
  35.         Me.Top = CInt((My.Computer.Screen.WorkingArea.Height \ 2) - (Me.Height \ 2))
  36.         Me.Left = CInt((My.Computer.Screen.WorkingArea.Width \ 2) - (Me.Width \ 2))
  37.     End Sub
  38. End Class


PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 12:40
Giovedì, 09/04/2015
Mi sembra che tu proprio non legga i post di risposta.
Va beh il problema è risolto direi che si può chiudere qui.

PM Quote
Avatar
archemi (Normal User)
Pro


Messaggi: 70
Iscritto: 08/01/2014

Segnala al moderatore
Postato alle 10:28
Venerdì, 17/04/2015
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

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 12:03
Venerdì, 17/04/2015
Testo quotato

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

PM Quote
Avatar
archemi (Normal User)
Pro


Messaggi: 70
Iscritto: 08/01/2014

Segnala al moderatore
Postato alle 14:23
Venerdì, 17/04/2015
Sicuramente! :)
Buon pomeriggio a tutti!

PM Quote