Sehr geehrte VB Community,
ich bin noch komplett neu hier und ebenfalls neu in dem Theme Programmierung
Ich habe mich dazu entschlossen ein Einstiegsprojekt umzusetzen (Ja wie immer der Browser)
Jetzt steh ich vor 2 Problemen und auch durch Recherche kam ich einfach auf keine vernünftige Lösung... gut vielleicht liegts auch am Code...
Und zwar möchte ich die Möglichkeit haben Tabs im Browser zu öffnen. Hierzu habe ich zwei Forms, eine mit dem Panel, auf welches der Browser gebunden wird (muss ja anscheinend bei CefSharp so sein, daher rührt teils auch mein Problem)
Im zweiten Form befindet sich das TabControl Element, auf welches dann Form 1 eingebunden wird.
Probleme die ich hier habe:
Ich kann von Form2 nicht auf Form1 zugreifen. Es kommt immer eine Fehlermeldung, dass eine Objektinstanz nicht zugewiesen ist. Also die Null Exception.
Zweites Problem: Ich möchte den Webseiten Titel in den Tabs haben. Jedoch müsste ich doch das über ein Ereignis prüfen, welches nachsieht ob die Website geladen hat oder? Jedoch komm ich an das Browserelement nicht so einfach heran, da es ja im Panel und im Tabcontroller eingebunden ist
Ich weiß diese Fragen sind wahrscheinlich wahrlich Noob Fragen, hier bitte ich um Verzeihung! Aber ich möchte wirklich besser werden im Thema programmieren
Vielen Dank schonmal!
Ach ja, ohne Code gehts hier ja nicht, ich füge mal beide Forms als Code ein:
Form1:
Form2:
ich bin noch komplett neu hier und ebenfalls neu in dem Theme Programmierung
Ich habe mich dazu entschlossen ein Einstiegsprojekt umzusetzen (Ja wie immer der Browser)
Jetzt steh ich vor 2 Problemen und auch durch Recherche kam ich einfach auf keine vernünftige Lösung... gut vielleicht liegts auch am Code...
Und zwar möchte ich die Möglichkeit haben Tabs im Browser zu öffnen. Hierzu habe ich zwei Forms, eine mit dem Panel, auf welches der Browser gebunden wird (muss ja anscheinend bei CefSharp so sein, daher rührt teils auch mein Problem)
Im zweiten Form befindet sich das TabControl Element, auf welches dann Form 1 eingebunden wird.
Probleme die ich hier habe:
Ich kann von Form2 nicht auf Form1 zugreifen. Es kommt immer eine Fehlermeldung, dass eine Objektinstanz nicht zugewiesen ist. Also die Null Exception.
Zweites Problem: Ich möchte den Webseiten Titel in den Tabs haben. Jedoch müsste ich doch das über ein Ereignis prüfen, welches nachsieht ob die Website geladen hat oder? Jedoch komm ich an das Browserelement nicht so einfach heran, da es ja im Panel und im Tabcontroller eingebunden ist
Ich weiß diese Fragen sind wahrscheinlich wahrlich Noob Fragen, hier bitte ich um Verzeihung! Aber ich möchte wirklich besser werden im Thema programmieren
Vielen Dank schonmal!
Ach ja, ohne Code gehts hier ja nicht, ich füge mal beide Forms als Code ein:
Form1:
VB.NET-Quellcode
- Imports System.ComponentModel
- Imports CefSharp
- Imports CefSharp.WinForms
- Public Class Form1
- Public Property mettbrowser As ChromiumWebBrowser
- Public Async Function PrepareBrowserAsync() As Task
- 'BrowserCache anlegen, damit nicht immer erneut die Cookie Abfrage auftaucht
- Dim cachePath = IO.Path.Combine(Environment.CurrentDirectory, "cache")
- If Not IO.Directory.Exists(cachePath) Then
- IO.Directory.CreateDirectory(cachePath)
- End If
- 'Einstellungen für CEF-Umgebung festlegen. Session-Cookies aktivieren, Pfad für diese festlegen (per cachePath)
- Dim settings = New CefSettings() With {
- .PersistSessionCookies = True,
- .CachePath = cachePath
- }
- Cef.Initialize(settings)
- 'Browser im Panel füllen
- mettbrowser = New ChromiumWebBrowser("") With {
- .Dock = DockStyle.Fill
- }
- 'Funktion eine halbe Sekunde Asynchron warten lassen, damit das Laden der Adresse funktioniert
- Await Task.Delay(500)
- pnlWebbrowserContainer.Controls.Add(mettbrowser)
- End Function
- Public Async Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- If Cef.IsInitialized = False Then
- Await PrepareBrowserAsync()
- 'Laden der Standardwebsite bei CEF wird dies mit LoadURL gemacht
- Await mettbrowser.LoadUrlAsync("https://google.de")
- End If
- End Sub
- Public Sub mettbrowser_LoadingStateChanged()
- 'Sauberes schließen bei Beenden
- Public Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
- Cef.Shutdown()
- End Sub
- '----------------------------------------------------------------------
- 'Buttons Programmieren
- Public Sub btnGoBack_Click(sender As Object, e As EventArgs) Handles btnGoBack.Click
- mettbrowser.Back
- End Sub
- Public Sub btnGoForward_Click(sender As Object, e As EventArgs)
- mettbrowser.Forward
- End Sub
- Public Sub btnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
- mettbrowser.Refresh()
- End Sub
- Public Sub btnDev_Click(sender As Object, e As EventArgs) Handles btnDev.Click
- mettbrowser.ShowDevTools
- End Sub
- Public Sub btnSource_Click(sender As Object, e As EventArgs) Handles btnSource.Click
- mettbrowser.ViewSource
- End Sub
- Public Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
- Me.mettbrowser.Load(txtUrl.Text)
- End Sub
- 'KeyDown Event, bei Enter in der Searchbar
- Public Sub txtUrl_KeyDown(sender As Object, e As KeyEventArgs) Handles txtUrl.KeyDown
- If e.KeyCode = Keys.Enter Then
- mettbrowser.Load(txtUrl.Text)
- End If
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Call Form2.NewTab()
- End Sub
- '----------------------------------------------------------------------
- End Class
Form2:
VB.NET-Quellcode
- Imports System.ComponentModel
- Imports CefSharp
- Imports CefSharp.WinForms
- Public Class Form2
- 'Verbindet TabControl von Form2 mit Form1
- Public Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Dim t As New TabPage
- Dim newtab As New Form1
- newtab.Show()
- newtab.TopLevel = False
- newtab.Dock = DockStyle.Fill
- t.Controls.Add(newtab)
- TabControl1.TabPages.Add(t)
- End Sub
- Public Sub NewTab()
- Dim t As New TabPage
- Dim newtab As New Form
- newtab.Show()
- newtab.TopLevel = False
- newtab.Dock = DockStyle.Fill
- t.Controls.Add(newtab)
- TabControl1.TabPages.Add(t)
- End Sub
- End Class