[Gelöst] Chronik-Seitenleiste für einen WebBrowser

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ExteNesia.de.

    [Gelöst] Chronik-Seitenleiste für einen WebBrowser

    Hi Leute,

    ich bin gerade dabei, einen WebBrowser zu schreiben. Soweit komme ich klar bis auf ein besonderes Feature: eine Chronik-Seitenleste. Der Browser speichert alle besuchten Webseiten in der history.dll ab und lässt nach jedem Eintrag eine Zeile frei. Wie kann ich das ermöglichen, dass in der Chronik-Seitenleiste die gesamte Chronik angezeigt wird (schon getan, in Textbox) und man wenn man einen Eintrag auswählt, direkt zu der jeweiligen Seite gelangt (und hier liegt das Problem) ? Wenn es so nicht geht, dann frage ich: Geht es mit einer bestimmten anzahl Buttons/Labels/LinkLabels mit den bsw. 10 letzten Einträgen?

    LG, ExteNesia.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ExteNesia.de“ ()

    System.IO.File-Methoden bzw. direkt ein StreamReader, String() und 'ne For-Schleife. Damit kannst Du was basteln.

    ExteNesia.de schrieb:

    Wenn der Zielname zu lang ist, soll er rechzeitig mit (...) beendet werden.
    Schau Dir mal die Eigenschaft AutoEllipsis an.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Mal was anderes: Was hast Du damit vor? Das klingt sehr merkwürdig und durchaus besser lösbar.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @ExteNesia.de Wenn Du ein Array Deiner Links hast, mach Dir sdazu ein Array Deiner LinkLabel, eine Schleife und feddich.

    VB.NET-Quellcode

    1. Dim ll() = {LinkLabel1, LinkLabel2, LinkLabel3, LinkLabel4, LinkLabel5}
    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!
    Für einen WebBrowser. Der speichert Chronik in einer Textdatei und ich brauch eine Seitenleiste für die Chronik. Wenn man auf einen der Einträge geht, soll sich die jeweilige Seite direkt öffnen.
    @ExteNesia.de Davon steht nix in Post #1.
    Fang an und schreib eine vollständige und belastbare Aufgabenstellung / Problembeschreibung, sonst reden wir permanent aneinander vorbei.
    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 ist so dann aber ranzig. Bau Dir dafür ein eigenes Control oder nimm' eine ListBox.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Au weia ! Aus dem Startpost werde ich nicht wirklich schlau und der Threadtitle hat irgendwie gar nichts mit dem Inhalt zu tun ! :cursing:

    Naja, ich versuche es mal:
    1. Du lädst die History-Einträge in eine Textbox. (?)
    Warum nicht eine ListView, die ist genau dafür gedacht und wesentlich besser geeignet.

    2. Wenn ich es richtig verstanden habe, willst du nun, einen Eintrag anklicken und im WebBrowser laden. (?)
    Das kann man so bewerkstelligen:
    So, oder so ähnlich

    VB.NET-Quellcode

    1. ' C&P Ready :D
    2. Public Class Form1
    3. Dim lv As New ListView
    4. Dim wb As New WebBrowser
    5. Dim sc As New SplitContainer
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. With lv
    8. .View = View.List
    9. .FullRowSelect = True
    10. .Width = 200
    11. .Dock = DockStyle.Fill
    12. End With
    13. With wb
    14. .Padding = New Padding(200, 0, 0, 0)
    15. .Dock = DockStyle.Fill
    16. End With
    17. With sc
    18. .Dock = DockStyle.Fill
    19. End With
    20. sc.Panel1.Controls.Add(lv)
    21. sc.Panel2.Controls.Add(wb)
    22. Me.Controls.Add(sc)
    23. For i As Integer = 0 To 10
    24. lv.Items.Add("Test " & i.ToString)
    25. Next
    26. AddHandler lv.MouseDown, AddressOf lv_MouseDown
    27. AddHandler lv.MouseDoubleClick, AddressOf lv_MouseDoubleClick
    28. End Sub
    29. ' Damit sichergestellt ist, daß auch wirklich das selektierte Item angeklickt wurde,
    30. ' wird im MouseDown-Ivent, die Curser-Position abgefragt und In Variablen gespeichert.
    31. Private nX As Single
    32. Private nY As Single
    33. Private Sub lv_MouseDown(sender As Object, e As MouseEventArgs)
    34. nX = e.X : nY = e.Y
    35. End Sub
    36. Private Sub lv_MouseDoubleClick(sender As Object, e As MouseEventArgs)
    37. Dim oItem As ListViewHitTestInfo
    38. ' Hier wird überprüft, ob ein Item geklickt wurde,
    39. ' wenn ja, dann enthält oItem das geklickte Item, wenn nicht, dann nicht. ...
    40. oItem = lv.HitTest(CInt(nX), CInt(nY))
    41. ' ... Hier wird oItem dann auf Inhalt überprüft.
    42. If Not oItem Is Nothing Then
    43. ' Alles ok, dann ab zum WebBrowser.
    44. wb.Navigate(oItem.Item.Text)
    45. End If
    46. End Sub
    47. End Class


    Habe ich das richtig verstanden, oder geht es doch um was anderes ?(
    So, der Titel und der Startpost wurden überarbeitet.

    @Pasta Ja, das hast du richtig verstanden. Vielen Dank für deine hilfreiche Antwort mit Erklärung! Ich werde den Code gleich mal testen.



    So, leider funktioniert das nicht ganz so wie gedacht. WebBrowser und ListView sind schon vorhanden (sollen nicht erst erstellt werden) Beschriftungen der Items sollen aus der history.dll geladen werden (einfach auslesen, jede Zeile ist ein eigenes Item) und dann die Beschriftung als URL benutzen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ExteNesia.de“ ()

    ExteNesia.de schrieb:

    Der Browser speichert alle besuchten Webseiten in der history.dll ab und lässt nach jedem Eintrag eine Zeile frei.
    In einer .DLL wird nix gespeichert, eher in einer .LOG oder .TXT oder so.
    Dass da eine Zeile frei ist kann auch mit dem verwendeten Zeilenende-Zeichen zusammenhängen.
    Lies diese datei mal ein mit IO.File.ReadAllLines(PFAD) und sieh Dir an, ob da jeder zweite Eintrag leer ist. Wenn ja, mach Dir ne List(Of String) und pack dort die relevanten Zeilen rein.
    Das zurückgegebene Array / List übergibst Du als DataSource an eine ListBox (nicht ListView) und reagierst bei Klick, Doppelklick oder so entsprechend.
    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!
    Okay, ich verstehe... ich werde es versuchen und mich bald mit dem Code melden. Übrigens habe ich die history-Datei nur so dll genannt warum nicht aber ich kann es ja ändern.



    Ich habe es mit ListBox1.Items.AddRange(IO.File.ReadAllLines("history.dll")) versucht,und es klappt! Mit dem auswählen klappt das wie folgt:

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    2. WebKitBrowser1.Navigate(ListBox1.SelectedItem.Text)
    3. End Sub

    Dieser Beitrag wurde bereits 14 mal editiert, zuletzt von „ExteNesia.de“ ()