Form/Control zentriert über anderer Form anzeigen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von stepper71.

    Form/Control zentriert über anderer Form anzeigen

    Hallo,

    ich habe eine Form die mit einem TableLayoutPanel Controls anzeigt (Form ist komplett ausgefüllt, Fill).

    Nun soll etwas über dem Form erscheinen mit einem Text (z.B. ein Label oder ein neues Form), das ganze soll zentriert über der Parent Form liegen und z.B. 80% des Parentform überdecken.
    Wenn ich ein Control benutzen möchte, z.B. ein Label, wird dieses immer im Hintergrund hinter dem TableLayoutPanel angezeigt, auch wenn ich diesem vorher im Designer sage "Im Vordergrund"
    Jetzt habe ich es mit einer neuen Form versucht:

    VB.NET-Quellcode

    1. Using frmTrefferAnzeige = New frmTreffer
    2. frmTrefferAnzeige.StartPosition = FormStartPosition.CenterParent
    3. frmTrefferAnzeige.Show()
    4. Application.DoEvents()
    5. Threading.Thread.Sleep(2000)
    6. End Using


    Das Form wird zwar angezeigt, aber nicht über dem Parent Form zentriert sondern oben links am Parentform ausgerichtet.
    Wenn ich aber:

    frmTrefferAnzeige.ShowDialog()

    verwende funktioniert es. Ich will aber keine Eingabe in das Formular machen, es soll einfach nur ein paar Sekunden erscheinen und dann wieder verschwinden.
    Was mache ich falsch?
    Hallo Stefan,

    bitte entschuldige, das "me" war bereits gesetzt, nur nicht richtig gepostet:

    VB.NET-Quellcode

    1. Using frmTrefferAnzeige = New frmTreffer
    2. frmTrefferAnzeige.StartPosition = FormStartPosition.CenterParent
    3. frmTrefferAnzeige.Show(Me)
    4. Application.DoEvents()
    5. Threading.Thread.Sleep(2000)
    6. End Using


    Das Form wird links oben am Parentform ausgerichtet, es sei den der Aufruf erfolgt mit ShowDialog.
    Versuche es einmal so in der Art:

    VB.NET-Quellcode

    1. Public Class frmTreffer
    2. Private WithEvents myTimer As New Timer
    3. Dim myCounter As Integer = 0
    4. Public Sub New()
    5. MyBase.New()
    6. InitializeComponent()
    7. StartPosition = FormStartPosition.CenterParent
    8. myTimer.Interval = 1000 'Sekunden
    9. myTimer.Start()
    10. End Sub
    11. Private Sub Form_Timer(sender As Object, e As EventArgs) Handles myTimer.Tick
    12. myCounter += 1
    13. If myCounter <= 5 Then Return
    14. myTimer.Enabled = False
    15. Me.Close()
    16. End Sub
    17. End Class
    @VB1963: Danke, so funktioniert es. Wenn ich es jetzt richtig verstanden habe wird ein Timer in dem neuen Form erstellt, ist dieser abgelaufen schließt sich das Form selbst.

    Man soll ja nicht an funktinierenden Lösungen meckern, aber ist es wirklich so kompliziert einfach ein Formular zentriert zu öffnen und wieder zu schließen?
    Findest du das komliziert?
    Dieser Code macht nichts anderes, was du gerne möchtest.
    Die Eigenschaft StartPosition muss noch vor dem FormLoad-Ereignis eingestellt sein!
    Aber du kannst StartPosition = FormStartPosition.CenterParent auch im Formsdesigner einstellen
    und als nächstes einen Timer von der Toolbox in die Form ziehen und im Designer Timer1.Interval = 1000 einstellen...dann wird's noch ein bisschen kürzer.
    Wie deine Form aussieht - ist deine Sache.

    VB.NET-Quellcode

    1. Public Class frmTreffer
    2. Dim myCounter As Integer = 0
    3. Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. myTimer.Start()
    5. End Sub
    6. Private Sub Form_Timer(sender As Object, e As EventArgs) Handles Timer1.Tick
    7. myCounter += 1
    8. If myCounter <= 5 Then Return
    9. Timer1.Enabled = False
    10. Me.Close()
    11. End Sub
    12. End Class

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()