Problem mit WebBrowser, neuer Tab, TabControl, How-to

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Problem mit WebBrowser, neuer Tab, TabControl, How-to

    Hallo zusammen, ich habe mir zu Übungszwecken mal den Webbrowser in die Form eingebaut und möchte jetzt einen neuen Tab öffnen.





    Hierzu habe ich bereits mehrere Quellen gelesen, u.a.
    vb-paradise.de/index.php/Searc…highlight=webbrowser+strg
    social.msdn.microsoft.com/Foru…ebbrowser?forum=vbgeneral
    support.microsoft.com/en-us/he…eate-a-tabbed-web-browser
    stackoverflow.com/questions/14…tab-in-vb-net-application
    docs.microsoft.com/en-us/dotne…N&view=netframework-4.7.2
    Tastenkombi

    Diese Codezeilen bzw. Beispiele funktionieren bei mir nicht. Ich muss auch dazusagen, dass dort sehr oft dasselbe steht. Ich habe den Eindruck, dass diese alten Codezeilen sehr häufig kopiert wurden und dass man sie heute nicht mehr nehmen kann. Kurzum: Beim Ausführen lädt der Webbrowser die neue Seite nicht; das Programm läuft aber weiter, ohne zu hängen. Oder WebBrowser1 verschwindet komplett, sodass ich nur noch die Hintergrundfarbe der Form sehe. Als wenn immer eine Kleinigkeit fehlt...

    Mein Webbrowser heißt WebBrowser1.
    Die Url gibt der Benutzer über TextBox1 ein. Hier nehme ich immer google.de und bestätige mit Button_los. Bis hierhin funktioniert's.
    Button1 ist der Button, mit dem der neue Tab geöffnet werden soll. Nebenbei bemerkt, kann man das nicht mit einem Form1-Keydown-Event mit STRG + T machen?

    VB.NET-Quellcode

    1. ​Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    2. If e.Control And e.KeyCode = Keys.T Then
    3. MessageBox.Show("Test")
    4. End If
    5. End Sub


    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim tb As New TabPage()
    3. Dim wb As New WebBrowser
    4. wb.Dock = DockStyle.Fill
    5. wb.Navigate("www.google.com")
    6. tabControl1.TabPages.Add(tb)
    7. tb.Controls.Add(wb)
    8. End Sub


    Könnte mir bitte jemand helfen?
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    @Bartosz Mach Dir eine eigene TabPage als UserControl, das die Funktionalität erfüllt.
    Wenn ein neuer Tab geöffnet werden soll, erstell eine neue Instanz dieser TabPage.
    ====
    Ansonsten schau mal in der FormX.Designer.vb nach, wie das Studio einen WebBrowser-Tab anlegt, Prozedur InitializeComponents()).
    Das empfinde nach.
    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!
    @RodFromGermany ich weiß leider nicht, was du meinst. Hättest du bitte ein Beispiel für mich?
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    @Bartosz Über welche Programmiererfahrung verfügst Du?
    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!
    @RodFromGermany Nunja ich würde mich jetzt nicht als Beginner bezeichnen. Ich hatte in der Uni mit der Ansteuerung von Geräten zu tun, z.B. über die RS232 ein Netzteil ansteuern und dann eine Heizplatte regeln oder einen XY-Tisch programmieren. In meiner Freizeit lernte ich weiter, vor allem in C++. Ich schaue gerade in jede Richtung, um zu lernen, und habe mich jetzt am WebBrowser versucht. Mit solchen WebBrowser-Dingen kenne ich mich leider nicht aus. Aber was man nicht kann, kann man lernen ;)

    Meine Stärken liegen also im oben Genannten und im Mathematischen (Matrizen multiplizieren, etc).
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    ? Ich hab nen Button, n TabControl (mit seinen 2 DefaultTabPages) und im EventHandler des Buttons den Code aus Post#1, CodeBlock#2. Läuft. So what?

    Eh, Moment. Dazu braucht es aber keinen WebBrowser als eigenständiges CE auf dem Form. Der WebBrowser wird ja zur Laufzeit erstellt. Liegt da bei Dir das Kaninchen in Salz und Pfeffer?
    Bilder
    • ItRuns.png

      34,49 kB, 1.199×309, 53 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    @VaporiZed das ist merkwürdig. Bei mir kommt gar nichts.

    Den WebBrowser1 habe ich entfernt.

    Ich habe als globale Variablen (noch von vorher, als ich gesucht habe)

    VB.NET-Quellcode

    1. Private tabPage1 As System.Windows.Forms.TabPage
    2. Private tabControl1 As System.Windows.Forms.TabControl


    Dann im Form1_Load

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Me.tabPage1 = New System.Windows.Forms.TabPage()
    3. Me.tabControl1 = New System.Windows.Forms.TabControl()
    4. End Sub


    und dann den Code aus Post 1

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim tb As New TabPage()
    3. Dim wb As New WebBrowser
    4. wb.Dock = DockStyle.Fill
    5. wb.Navigate("www.google.com")
    6. tabControl1.TabPages.Add(tb)
    7. tb.Controls.Add(wb)
    8. End Sub
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    Eh ... Wird das TabControl überhaupt angezeigt, unabhängig vom Webbrowser? Das musst Du nämlich veranlassen, sonst passiert nichst im sichtbaren Wellenlängenbereich. Wenn Du sie haben willst, musst Du selber dafür sorgen, dass sie auch angezeigt werden, bevor Du irgendwas mit dem Webbrowser anfängst. Meine Meinung: Die globalen Variablen brauchst Du gar nicht. Mein Vorschlag: Schmeiß die weg und dann zieh Dir aus der ToolBox aus der Kategorie |Container| ein TabControl auf's Form. tabPage1 verwendest Du im Code außer zur Initialisierung gar nicht. Wozu existiert diese Variable dann?





    VaporiZed (als Moderator): Änder mal bitte den Titel des Threads ab. »Webbrowser« ist ein wenig nichtssagend. Es schildert nicht Dein Problem.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    @Bartosz Das TabControl packst Du im Designer auf die GUI.
    Das UserControl sollte noch eine TextBox zum Editieren der URL sowie einen Button zum Navigieren enthalten, ersatzweise fängst Du in der TextBox das Enter ab.
    Den Code erstellst Du ebenfalls im UserControl:

    VB.NET-Quellcode

    1. Public Class MyWebBrowser
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Me.WebBrowser1.Navigate(Me.TextBox1.Text)
    4. End Sub
    5. End Class
    Die Form:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim tp = New TabPage("WebBrowser")
    4. Dim wb = New MyWebBrowser
    5. wb.Dock = DockStyle.Fill
    6. tp.Controls.Add(wb)
    7. Me.TabControl1.Controls.Add(tp)
    8. End Sub
    9. End Class
    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!
    @VaporiZed Die globalen Variablen sind raus (hab mal ein bisschen aufgeräumt, musste sowieso sein). Die TabControl ist aus der Toolbox auf's Form gezogen worden. TabPage1 ist ebenso raus.
    @RodFromGermany TextBox und Button habe ich, Enter wird auch abgefangen.
    @VaporiZed es gibt nur noch diesen Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. TextBox1.Text = "hier URL"
    4. End Sub
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. '============================================================================
    7. ' Das Tab-Steuerelement auf der Form editieren und Webbrowser andocken
    8. '============================================================================
    9. Dim URL As String = TextBox1.Text
    10. TabControl2.TabPages.Clear()
    11. Dim tb As New TabPage()
    12. Dim wb As New WebBrowser
    13. wb.Dock = DockStyle.Fill
    14. wb.Navigate(URL)
    15. TabControl2.TabPages.Add(tb)
    16. tb.Controls.Add(wb)
    17. tb.Text = URL
    18. End Sub
    19. Private Sub TextBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseDown
    20. TextBox1.Text = ""
    21. End Sub
    22. Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    23. If e.KeyCode = Keys.Enter Then 'man kann mit ENTER bestätigen und Suche starten
    24. Button1_Click(0, Nothing)
    25. End If
    26. End Sub
    27. End Class


    Ich werde solange RodFromGermanys Code probieren
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    @Bartosz Mach Dir das beschriebene UserControl.
    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!
    Hm ... jetzt hast Du beschrieben, was Du hast. Aber kein Ergebnis genannt, ob es jetzt läuft oder was Du siehst oder eben nicht oder wieauchimmer. Ich will RfGs Lösung nicht beiseitewischen, aber: Kannst Du mal bitte das Projekt bereinigt (außerdem ohne bin-, obj-, .vs- und .git-Ordner) und gezippt über [+ Erweiterte Antwort] hochladen? Vielleicht finden wir so das Problem und eine Lösung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.