Tabcontrol Tabpage auswählen Problem

  • VB.NET
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Mete1997.

    Tabcontrol Tabpage auswählen Problem

    Hey Leute ,
    nun wenn ich meinen Browser starte wird ein neuer Tab hinzugefügt und die Startseite geöffnet alles funktioniert wie gewollt. Aber wenn ich manuell ein Tab hinzufügen möchte per Button wird die Seite im ersten Tab geöffnet.Ich hoffe ihr versteht wie ich es meine.

    Neuer Tab Code:

    VB.NET-Quellcode

    1. Dim browser As New Skybound.Gecko.GeckoWebBrowser
    2. form1.Tabcontrol.TabPages.Add(i, "neuer tab")
    3. form1.Tabcontrol.SelectTab(CInt(i) - 1)
    4. browser.Name = "- form1"
    5. browser.Dock = DockStyle.Fill
    6. form1.textbox1.Focus()
    7. form1.Tabcontrol.SelectedTab.Controls.Add(browser)
    8. i += 1
    9. CType(form1.Tabcontrol.SelectedTab.Controls.Item(0), Skybound.Gecko.GeckoWebBrowser).Navigate(My.Settings.homepage)


    Manuell neuer Tab Code:

    VB.NET-Quellcode

    1. Dim load As New Skybound.Gecko.GeckoWebBrowser
    2. Tabcontrol.TabPages.Add(i, "load")
    3. Tabcontrol.SelectTab(CInt(i) - 1)
    4. load.Name = "load - form1"
    5. load.Dock = DockStyle.Fill
    6. textbox1.Focus()
    7. Tabcontrol.SelectedTab.Controls.Add(load)
    8. i += 1
    9. CType(Tabcontrol.SelectedTab.Controls.Item(0), Skybound.Gecko.GeckoWebBrowser).Navigate(urlzueinerwebsite)


    Beide Codes haben keine Compiler Fehler bei mir. Der Fehler ist halt nur wenn ich manuell ein neuen Tab öffnen möchte zu einem bestimmten Link er meinen ersten Tab dorthin navigieren lässt und mein 2.ter Tab leer ist.

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

    Also ich persönlich habe speziell mit Gecko-bla nie gearbeitet, allerdings könnte es sein, dass die IDE Fehler unterdrückt (ist bei mir mehrfach vorgekommen..).

    Daher die Frage: Hast du schonmal ein Try Catch drumgemacht und ne MessageBox zur Ausgabe?
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    Rootbob91 schrieb:

    Daher die Frage: Hast du schonmal ein Try Catch drumgemacht und ne MessageBox zur Ausgabe?

    Wie meinst du das ? Ich glaube mein Fehler ist hier.Es wird einfach der falsche Tab ausgewählt diese Codezeile ist bei beiden Codes identisch.

    VB.NET-Quellcode

    1. Tabcontrol.SelectTab(CInt(i) - 1)

    Aber ich weiss leider nicht wie ich ihn beheben kann.
    Ich meine das damit:

    VB.NET-Quellcode

    1. Try
    2. TabControl.SelectTab(CInt(i) - 1)
    3. 'weitere Anweisungen
    4. Catch ex As Exception
    5. 'Fehlerausgabe
    6. 'Hier springt der "Code" hin, falls ein Fehler oben ausgelöst wird.
    7. MessageBox.Show(ex.Message)
    8. End Try


    Besser noch -> Du packst die Try Catch-Geschichte um beide Code-Blöcke.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Nun bekomme ich in einer Messagebox diesen Fehler.
    InvalidArgument=Value of '-1' is not valid for 'index'.Parameter name:index

    Ich bekomme keinen Fehler.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Mete1997“ ()

    Ha, wusst ichs doch ;)..

    Ähm, joar. Das heißt halt, dass der Index nicht vorhanden ist, den du da ansprichst^^..

    Wenn du halt 4 TabPages hast, und index 4 ansprichst, gibt das n Error - denn es gäbe nur 0,1,2,3.

    Ich Tippe auf ein verwurschtel mit den Controls, dass du also irgendwas falsch ansprichst.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Ich bekomme keinen Fehler es passiert wieder das gleiche.Also im ersten Tab wird es geöffnet.
    Ich glaube jetzt liegt es an diesen 2 Code Zeilen

    VB.NET-Quellcode

    1. CType(Tabcontrol.SelectedTab.Controls.Item(0), Skybound.Gecko.GeckoWebBrowser).Navigate(urlzueinerwebsite)
    2. Tabcontrol.SelectTab(CInt(i) - 1)
    Arbeite nicht mit irgendwelchen seltsamen Indizes. Arbeite mit Objekten:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim tP As New TabPage
    3. TabControl1.TabPages.Add(tP)
    4. TabControl1.SelectedTab = tP
    5. End Sub


    Abgesehen davon macht es hier Sinn, sich eine Ableitung der Tabpage-Klasse zu erstellen und dort ein Browser-Control zu kapseln.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Bist du denn sicher, dass die Objekte richtig angesprochen werden?

    - Ist zu dem Zeitpunkt eine TabPage selected?
    - Hat die TabPage Controls?
    - Ist der Zugriff via Item(0) korrekt? Wie wärs mit Controls(0)?
    - Ist das Objekt was du ansprichst vom Typ Geckowebbrowser?

    PS: Hast du i als Integer deklariert? Dann ist

    VB.NET-Quellcode

    1. CInt(i)
    doch unnötig?
    Oben hatte ich glaube ich gesehen, dass du

    VB.NET-Quellcode

    1. i += 1
    rechnest?
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    SpaceyX schrieb:

    Arbeite nicht mit irgendwelchen seltsamen Indizes. Arbeite mit Objekten:

    Was meinst du damit ?
    Hab mein Problem gelöst und zwar hab ich den Code von neuer Tab etwas geändert und einen Fehler in meinem Menustrip.Click Event behoben.
    Ich hab nur noch ein Problem und zwar wenn ich jetzt diesen Tab öffne öffnet er es im richtigen neuen Tab aber der Titel vom Tab ist falsch woran liegts ? GeckoFX ladet die Seite langsam ich muss wohl mein Programm an einigen Stellen optimieren.
    Ich habe noch eine Frage und zwar wenn ich in meiner Suchbox about:bla eintippe wird mir gesagt GeckoFX weiss nicht wie es geöffnet werden soll.Ich würde gerne Wissen wie ich den logisch handeln muss wenn ich in meine Textbox etwas eingebe das diese Funktion ausgeführt wird.Und wenn ich auf einer jeweiligen Tabpage bin das diese Tabpage die richtige URL von der Tabpage anzeigt.Ich hoffe ihr versteht mich.


    Ich meine das so, wie ich es in dem Code-Beispiel gezeigt habe. Siehe auch dazu noch die Anmerkung unter dem Beispiel.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ahso okay.
    Ich habe aber noch 2 Probleme und zwar wenn ich ein Tab offen habe und ein neues öffne wird die URL nicht geändert wenn ich jeweils zwischen den Tabs wechsele und wenn ich in die Textbox etwas eingebe das die Funktion auch ausgeführt wird.

    @SpaceyX
    Wenn ich es so mache wie du es mir sagst klappt es aber ich kann den Tab nicht mehr schließen.Hier mein Code.

    VB.NET-Quellcode

    1. CType(Tabcontrol.SelectedTab.Controls.Item(0), Skybound.Gecko.GeckoWebBrowser).Dispose()
    2. Tabcontrol.TabPages.Remove(Tabcontrol.SelectedTab)
    3. i -= 1
    4. If i <= 1 Then
    5. class1.neuertab()
    6. End If


    SpaceyX schrieb:

    Abgesehen davon macht es hier Sinn, sich eine Ableitung der Tabpage-Klasse zu erstellen und dort ein Browser-Control zu kapseln.

    Kannst du mir das erklären an einem Beispiel?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Mete1997“ ()

    Hier ein Beispiel:

    VB.NET-Quellcode

    1. Imports Skybound.Gecko
    2. Public Class WebbrowserTabPage : Inherits TabPage
    3. Private _browser As New GeckoWebBrowser()
    4. Public ReadOnly Property CurrentURL As String
    5. Get
    6. Return _browser.Url.ToString()
    7. End Get
    8. End Property
    9. Public Sub New()
    10. _browser.CreateControl()
    11. _browser.Dock = DockStyle.Fill
    12. AddHandler _browser.DocumentCompleted, Sub(x, y) Me.Text = Me.CurrentURL
    13. Me.Controls.Add(_browser)
    14. End Sub
    15. Public Sub Navigate(ByVal url As String)
    16. _browser.Navigate(url)
    17. End Sub
    18. Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    19. _browser.Dispose()
    20. MyBase.Dispose(disposing)
    21. End Sub
    22. End Class


    Verwenden kannst das z. B. so:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Sub New()
    3. InitializeComponent()
    4. Skybound.Gecko.Xpcom.Initialize("C:\Users\SpaceyX\Desktop\xulrunner-1.9.2.en-US.win32\xulrunner")
    5. End Sub
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. Dim tP As New WebbrowserTabPage()
    8. TabControl1.TabPages.Add(tP)
    9. tP.Navigate("www.google.de")
    10. End Sub
    11. End Class


    Lass einfach mal Deine seltsamen Zählervariablen da raus. Die brauchst Du nicht. Schau doch mal einfach, was das TabPage-Control so an Properties hat. U. A. findest Du dann auch sowas wie:

    VB.NET-Quellcode

    1. TabControl1.TabPages.Count


    Ich verstehe nicht so ganz, was Du grundsätzlich bezwecken willst. Evtl. magst es nochmal mit Worten, anstatt mit Code erklären, dann kann man Dir etwas vorschlagen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Also das der Code schlecht ist -> Zählervariabeln ist so weil ich diesen Browser als Grundgerüst benutze Webbrowser mit Tabs und Co.
    Ich habe ihn natürlich etwas umprogrammiert aber einige alte Stellen gibt es noch die ich noch versuche zu überarbeiten.
    Nun zu meiner Frage. Ich möchte in einem neuen Tab eine bestimmte Seite öffnen dies habe ich nun auch gelöst wenn auch etwas schlecht.Nun ich möchte nun eine Webbrowser Einstellungen Seite erstellen die ich per about befehl öffnen kann. Dies hab ich auch geschafft also das man es per Menustrip_Click öffnen kann aber ich bekomme immer noch Fehlermeldungen wenn ich z.B diesen Einstellungen Tab beenden möchte.Oder nochmal die Tabpage Einstellungen öffne.Und ich habe das Problem das ich z.B mehrere Tabs habe und wenn ich mein Tab wechsel die Suchbox die falsche URL anzeigt.

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