TabChange, dann Refresh, dann DownloadString

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Derfuhr.

    TabChange, dann Refresh, dann DownloadString

    Hallo Leute!
    Nachdem das Downloaden des strings endlich funktioniert, bin ich auf ein neues problem gestoßen.
    hier erstmal der quellcode:

    VB.NET-Quellcode

    1. 'label1.text lautet "Downloading..."
    2. 'label1 befindet sich im "Der String-Tab"
    3. Private Sub TabControl1_Selecting(ByVal sender As Object, ByVal e As TabControlCancelEventArgs) _
    4. Handles TabControl1.Selecting
    5. If e.TabPage.ToString = "TabPage: {Der String-Tab}" Then
    6. Me.Refresh()
    7. label1.Text = webc.DownloadString("http://meinewebsite.iwas.com/text.html").Substring(27, Len(webc.DownloadString("http://meinewebsite.iwas.com/text.html")) - 196)
    8. End If
    9. End Sub


    Wenn ich also auf den Tab "Der String-Tab" klicke, wird dieser in der "Tab-Leiste" so abgebildet, als ob er gedrückt worden sei.
    Das aussehen des tabs selber ändert sich jedoch nicht. (form wird NICHT ge-refresht)
    erst nach dem downloaden des strings wird die form ge-refresht. so wird der text im label "Downloading..." für den benutzer gar nicht mehr sichtbar. das soll es aber! Dafür sollte eigendlich das me.refresh() sorgen, tut es aber leider nicht!

    - Also: wie kann ich es hinbekommen, das die form erst refresht, und dann der string heruntergeladen wird?
    Statt TabControl1.Selecting vielleicht besser TabControl1.SelectedIndexChanged.
    TabPage.ToString ist Müll. Besser: TabPage.Text oder TabPage.Name.

    Das runterladen muss in nen anderen Thread. Also entweder WebClient.DownloadStringAsync oder in nen eigenen Backgroundworker.
    WebClient.DownloadStringAsync sollte einfacher sein.

    Du lädtst den String übrigens 2 mal runter was unsinnig ist. Alles in eine Zeile stopfen ist ebenso Schwachsinn.
    ich hab erstmal das angewendet, was ich von @markus.obi verstanden habe:

    VB.NET-Quellcode

    1. Private Sub TabControl1_Selecting(ByVal sender As Object, ByVal e As TabControlCancelEventArgs) _
    2. Handles TabControl1.Selecting
    3. Me.Refresh()
    4. Dim htmltext As String = webc.DownloadStringAsync("http://meinewebsite.iwas.com/text.html")
    5. If e.TabPage.Name = "TabPage3" Then
    6. label1.Text = htmltext.Substring(27, Len(htmltext) - 196)
    7. End If
    8. End Sub


    dabei wird jedoch "http://meinewebsite.iwas.com/text.html" unterstrichen, und es wird gesagt, dass "Der Wert vom Typ "String" nicht in "System.Uri" konvertiert werden kann". Ich hab keine Ahnung, was das bedeuten soll, denn vorher mit DownloadString hats doch auch geklappt?!
    Das mit BackgroundWorker verstehe ich irgendwie auch nicht so richtig, könnte das einer erläutern?

    Danke im Vorraus!
    Kleines Beispiel zum Asyncronen download von strings:

    VB.NET-Quellcode

    1. Dim WithEvents webc As New Net.WebClient 'WebClient Deklarieren da ich ihn NICHT im Designer erstellt habe
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. webc.DownloadStringAsync(New Uri("http://www.google.de"))'asyncronen String download starten
    4. End Sub
    5. Private Sub webc_DownloadStringCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadStringCompletedEventArgs) Handles webc.DownloadStringCompleted
    6. 'Den gedownloadeten String an eine variable übergeben
    7. Dim htmltext As String = e.Result
    8. End Sub


    mfG

    Derfuhr

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