Wait-Panel -> wird unsauber angezeigt

  • VB.NET
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von michl75.

    Wait-Panel -> wird unsauber angezeigt

    Hallo,

    ich habe ein BGW, ein Datagridview und ein Panel auf meiner Form liegen... mal so grob.

    BGW funktioniert, DGV wird über eine for schleife formatiert > nur fabrne der zeilen etc.

    Aber... Das Panel wird bevor die schleife zum "formatieren" kommt per visible = true "angezeigt", ABER :( das Panel wird zwar angezeigt, aber das was drinnsteht nicht.
    Guggst du Bild :)

    Mein letzter "perverser" Versuch:

    VB.NET-Quellcode

    1. Private Sub SucheDSVorlauf()
    2. Panel4.Location = New Point(1, 1)
    3. Dim _Iw As Double = Panel4.Width / 2
    4. Dim _Ih As Double = Panel4.Height / 2
    5. Dim _Hw As Double = (Me.Width / 2) - _Iw
    6. Dim _Hh As Double = (Me.Height / 2) - _Ih
    7. Panel4.Location = New Point(_Hw, _Hh)
    8. Panel4.Visible = True
    9. Panel4.BringToFront()
    10. _formatierungSTOP = False
    11. ' *** Bindung an Datenquelle aufheben, da im Designer gebunden
    12. Me.FirmenstammDataGridView.DataSource = Nothing
    13. BackgroundWorker1.RunWorkerAsync()
    14. End Sub


    Was löst dieses Verhalten aus?

    Normalerweise sollte da drinnen stehen "Bitte warten..." und eine Progressbar auf Marquee sein.

    egal wie ich es drehe und mache, immer das gleiche bescheidene Ergebnis.

    Viele Grüße
    Michl

    Edit:

    Habs eben mal so probiert...
    gleiche Mist, wird nur n Rahmen angezeigt und zwei leere Balken...

    VB.NET-Quellcode

    1. Private Sub SucheDSVorlauf()
    2. CRMWaitForm_01.Show()
    3. _formatierungSTOP = False
    4. ' *** Bindung an Datenquelle aufheben, da im Designer gebunden
    5. Me.FirmenstammDataGridView.DataSource = Nothing
    6. BackgroundWorker1.RunWorkerAsync()
    7. End Sub

    Bilder
    • Unbenannt.JPG

      13,03 kB, 436×172, 25 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „michl75“ ()

    michl75 schrieb:

    aber das was drinnsteht nicht.
    Vielleicht updatest Du mal das Panel, wenn alles drinne steht:

    VB.NET-Quellcode

    1. Panel4.Update()

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das hab ich auch versucht, hat aber nichts gebracht.

    Es scheint, als würde das Waitform.show zwar aufgerufen, aber die Grafik kommt nicht dem abarbeiten vom Code hinterher.

    Habe es mit einem Panel versucht, mit einem kleinen extra Form (wir grad als Waitform geschrieben).

    Immer der gleich Effekt.

    Edit:

    Gibt's ne Möglichkeit per Befehl (keine Ahnung wie) zu sagen, mach erst weiter wenn form komplett aufgebaut ist ?

    ...nur so ne Idee ohne zu wissen wie :)

    michl75 schrieb:

    Waitform.show
    Ich denke mal, Du arbeitest auf zwei Instanzen einer Form und weißt nix davon. ;(
    Verstehe dies:
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    hab jetzt so gelöst... werde zwar bestimmt haue bekommen, aber es erfüllt seinen zweck und großer Zeitunterschied ist auch nicht zu erkennen...

    VB.NET-Quellcode

    1. Panel4.Location = New Point(1, 1)
    2. Dim _Iw As Double = Panel4.Width / 2
    3. Dim _Ih As Double = Panel4.Height / 2
    4. Dim _Hw As Double = (Me.Width / 2) - _Iw
    5. Dim _Hh As Double = (Me.Height / 2) - _Ih
    6. Panel4.Location = New Point(_Hw, _Hh)
    7. Panel4.Visible = True
    8. Panel4.BringToFront()
    9. Static start As Single
    10. start = VB.Timer()
    11. Do While VB.Timer() < start + 0.1
    12. System.Windows.Forms.Application.DoEvents()
    13. Loop


    jetzt wird das Panel sauber angezeigt

    michl75 schrieb:

    VB.NET-Quellcode

    1. System.Windows.Forms.Application.DoEvents()
    Das ist eine sehr unsaubere Lösung :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    michl75 schrieb:

    werde zwar bestimmt haue bekommen


    ...hab ja gesagt, bekomme haue :)

    in diesem Fall, der zweck rechtfertigt die mittel :) ...bitte nicht weiter schimpfen :)


    Ich werde an dem Problem weiterarbeiten, aber erstmal suche ich nach anderen alternativen. vielleicht baue ich auch den gesamten ladevorgang um und baue direkt eine MySql-Abfrage ein ohne über DataSet-Designer zu gehen.