cs_pompomp
Messages postés21Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention21 août 2008
-
26 juil. 2008 à 17:29
cs_pompomp
Messages postés21Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention21 août 2008
-
21 août 2008 à 18:09
Bonjour,
dans mon apprentissage du VB.NET, j'ai un problème avec les tabcontrol :
je fais un système d'onglet dynamiques de ce style :
Private compteur
As
Integer = 0
Private
Sub Button1_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click
Dim onglet
As
New System.Windows.Forms.TabPage
TabControl1.Controls.Add(onglet)
compteur = compteur + 1
onglet.Text =
"Onglet" & compteur
TabControl1.SelectedIndex = compteur
Private
Sub TabControl1_TabIndexChanged(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles TabControl1.TabIndexChanged
MsgBox(
"ok")
End
Sub
Quand je cliques sur Button1, le nouvel onglet s'ouvre bien, le nom est ok et il passe bien en premier plan par rapport à l'onglet précédent mais je ne passe pas par TabControl1_TabIndexChanged. Quel serait l'évènement qui me permettrait de passer par TabControl1_TabIndexChanged à l'ouverture de l'onglet?
youpiyoyo
Messages postés539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 juillet 2010 2 août 2008 à 13:50
voici ce que tu veux faire:
Public Class Form1
Private compteur As Int16
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim onglet As New System.Windows.Forms.TabPage
compteur = compteur + 1
onglet.Text = "Onglet" & compteur
TabControl1.TabPages.Add(onglet)
Dim wb As New WebBrowser
wb.Url = New Uri("http:\\www.google.fr")
wb.Dock = DockStyle.Fill
wb.Name = "wb" & compteur
TabControl1.TabPages(compteur).Controls.Add(wb)
TabControl1.SelectedIndex = compteur
AddHandler wb.DocumentCompleted, AddressOf AllWeb_DocumentCompleted
End Sub
Private Sub AllWeb_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
TabControl1.TabPages(TabControl1.SelectedIndex).Text = sender.Document.Title
End Sub
cs_pompomp
Messages postés21Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention21 août 2008 30 juil. 2008 à 15:46
Salut,
merci pour ta réponse. Avec SelectedIndexChanged, j'ai bien la msgbox qui apparait (cf code au dessus). Par contre, quand j'ouvre le 1er onglet, la msgbox apparait une fois, quand j'en ouvre un 2è, elle apparait fois et ainsi de suite. Comment faire pour que la procédure TabControl1_SelectedIndexChanged ne s'exécute qu'une seule fois?
Vous n’avez pas trouvé la réponse que vous recherchez ?
youpiyoyo
Messages postés539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 juillet 2010 30 juil. 2008 à 16:40
Comprend pas, désolé.
TabControl1_SelectedIndexChanged n'est executé que lorsque tabindex change, donc pas 2 fois
code
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim onglet As New System.Windows.Forms.TabPage
compteur = compteur + 1
onglet.Text = "Onglet" & compteur
'TabControl1.SelectedIndex = compteur
TabControl1.TabPages.Add(onglet)
End Sub
Private Sub TabControl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged
MsgBox("ok")
End Sub
tu n'as pas besoin defaire un addhandler... ton tabcontrol est déjà génré dans le designer comme friend with events....
@+
youpi :)
cs_pompomp
Messages postés21Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention21 août 2008 30 juil. 2008 à 18:56
Salut, en fait, pour apprendre, j'aimerais me faire un navigateur avec un système d'onglet dynamique. J'ai donc pour chaque onglet un axwebbrowser. Pour gérer chaque axwebbrowser et comme je ne sais pas combien il y en aura, je pensais passer par un addhandler, d'après ce que j'ai pu lire, ça a l'air d'être la meilleure méthode. De plus, j'ai l'impression qu'on ne peut pas mettre de nom à un axwebbrowser.
youpiyoyo
Messages postés539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 juillet 2010 31 juil. 2008 à 10:01
Salut,
Pour ton Tab contronl tu n'as pas besoin de créer un handler parce que l'a déjà créer avec le designer de visual. en revanche si tu le créé dynamiquement il faudra effectivement que tu lui ajoutes un handler. Par contre, pour tes webbrowser si tu les créés dynamiquement il faudra que tu créés leurs propres handlers pour que tu puisses catcher les évenements.
petite question, tu utilises bien visual 2005 ou 2008, pourquoi tu prend axwebbrowser? pourquoi tu prends pas le webbrowser fournit par le framework?
@+
youpi :)
cs_pompomp
Messages postés21Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention21 août 2008 31 juil. 2008 à 12:09
salut,
j'utilise bien VS 2008.
Pour l'axwebbrowser, c'est tout simplement parce qu'en regardant quelques tutoriaux, j'ai vu que c'était le plus utilisé. Tu connaîtrais les avantages et inconvénients de chaque?
youpiyoyo
Messages postés539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 juillet 2010 1 août 2008 à 09:38
Salut,
écoute non je connais pas les différences mais webbrowser est fournit automatiquement donc mieux documenter et plus facile d'utilisation.
tu as réglé ton problème au faite?
@+
youpi :)
Quand je le lance, les onglets s'ouvrent bien mais la navigation ne se fait pas. De plus, quand je fais un debug pas à pas, il ne passe par Naviguer() qu'après le 2è clic sur Button1.
Quand tu me dis que je dois créer mes propres handlers, que veux tu dire par là?
youpiyoyo
Messages postés539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 juillet 2010 1 août 2008 à 14:12
vire ton AddHandler TabControl1.SelectedIndexChanged,
AddressOf Naviguer
ton TabControl1 a deja un Friend with events regarde dans ton designer tu veras.... oublie le...
Qu'est ce que tu veux faire quand l'utilisateur change d'onglet aller sur google... c bête...
Je pense ce que tu veux faire c a chaque fois que tu crées ton onglet il va sur google ce qui est différent donc ton selectedIndexChanged ne sert à rien.
si pour une raison ou une autre tu veux quand meme que lorsque l'on change d'onglet il affiche un site exemple free
voici le code
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim onglet As New System.Windows.Forms.TabPage
compteur = compteur + 1
onglet.Text = "Onglet" & compteur
TabControl1.TabPages.Add(onglet)
Dim wb As New WebBrowser
wb.Url = New Uri("http:\\www.google.fr")
wb.Dock = DockStyle.Fill
wb.Name = "wb" & compteur
TabControl1.TabPages(compteur).Controls.Add(wb)
TabControl1.SelectedIndex = compteur
End Sub
Private Sub TabControl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged
Try
Dim CurrentWb As WebBrowser = DirectCast(TabControl1.TabPages(TabControl1.SelectedIndex).Controls("wb" & TabControl1.SelectedIndex), WebBrowser)
CurrentWb.Navigate("www.free.fr")
Catch ex As Exception
End Try
End Sub
il son site de départ c google et quand tu changes d'onglet il va sur free
navigue tu veras.
Enfin bref explique ce que tu veux faire parce que la... ce code me parait inutile
@+
cs_pompomp
Messages postés21Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention21 août 2008 1 août 2008 à 15:55
Merci,
ce que je veux faire, c'est un navigateur tout ce qu'il y a de plus standard : je cliques sur un bouton qui ouvre un nouvel onglet avec un webbrowser. A l'ouverture de l'onglet se charge la page de démarrage. Mon problème était de gérer les différents webbrowser créés à l'ouverture des ongletset notamment celui qui est visible. Mais on dirait que ta fonction DirectCast(TabControl1.TabPages(TabControl1.SelectedIndex).Controls("wb" & TabControl1.SelectedIndex), WebBrowser) sert à ça. Et ta fonction TabControl1.TabPages(compteur).Controls.Add(wb) règle un autre de mes problèmes.Par contre, à quoi sert wb.Url = New Uri("http:\\www.google.fr") ?
En tout cas, tu as réglé un de mes gros problèmes.
youpiyoyo
Messages postés539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 juillet 2010 1 août 2008 à 16:13
Salut juste ce code te servira alors.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim onglet As New System.Windows.Forms.TabPage
compteur = compteur + 1
onglet.Text = "Onglet" & compteur
TabControl1.TabPages.Add(onglet)
Dim wb As New WebBrowser
wb.Url = New Uri("http:\\www.google.fr")
wb.Dock = DockStyle.Fill
wb.Name = "wb" & compteur
TabControl1.TabPages(compteur).Controls.Add(wb)
TabControl1.SelectedIndex = compteur
End Sub
Uri est " uniform resource identifier" le contructeur des liens html.
tu veras url n'accepte que des uri...
par contre c'est la que tu auras peut etre besoin de creer tes handlers mais sur les webbrowser et non sur le tab control
cs_pompomp
Messages postés21Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention21 août 2008 1 août 2008 à 19:22
salut,
grâce à toi et cette fonction DirectCast(TabControl1.TabPages(TabControl1.SelectedIndex).Controls("wb" & TabControl1.SelectedIndex), WebBrowser), j'ai déjà fait un grand pas. Le dernier petit(?) problème : je voudrais qu'une fois la page web chargée, le titre de la page s'affiche dans l'onglet et dans la barre de titre. J'y arrive déjà pour le 1er onglet créé en dur dans le Design via wb0_DocumentCompleted(
ByVal sender
As
Object
,
ByVal
e
As
System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
Handles
wb0.DocumentCompleted
Je devrais donc créér une fonction
wb_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles wb.DocumentCompleted
et c'est là où je pense que tu voulais en venir quand tu disais que j'ai besoin de créer mes handlers. Mais comment faire? Et une fois cette fonction créée, dois-je l'appeler ou sera-t-elle appelée automatiquement?
cs_pompomp
Messages postés21Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention21 août 2008 2 août 2008 à 19:54
Salut,
grâce à toutes tes explications, j'ai quasiment fini ce que je voulais faire et je vois à peu près le fonctionnement des Addhandlers.
Je vais juste abuser encore un peu pour une question qui n'a rien à voir mais je n'ai pas trouvé la réponse dans le forum :
je voudrais faire un copier/coller/couper/sélectionner tout/supprimer en utilisant ExecWB mais je ne l'ai pas avec Webbrowser (alors que je l'avais avec axwebbrowser). J'ai trouvé cette propriété : CurrentWb.document.ExecCommand() mais il me demande 3 arguments et je ne sais pas quoi mettre, si c'est bien la bonne propriété
cs_pompomp
Messages postés21Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention21 août 2008 17 août 2008 à 19:42
Hello Youpi,
je reviens vers toi en même temps que je reviens sur mon sujet : J'ai pu le peaufiner pas mal grâce à tes conseils mais il me reste un dernier gros problème : J'ai fait un bouton de suppression d'onglets. La suppression en elle même marche bien mais pour que je puisse réutilisé les suivants celui qui a été supprimé. Je m'explique : je ne peux pas réutilisé les onglets suivant celui qui a été supprimé car le nom du webbrowser n'est pas associé à l'index de l'onglet. Si tu préfères, si je supprime le 2è onglet (sur 3) le 3è va retrouver l'index 1 vu qu'il passera en 2è mais son webbrowser attaché gardera le nom de wb2 alors que pour utiliser la fonction Dim CurrentWb
As
WebBrowser =
DirectCast
(TabControl1.TabPages(TabControl1.SelectedIndex).Controls(
"wb"
& TabControl1.SelectedIndex), WebBrowser)
le nom devrait passer à wb1. D'où ma question : comment faire pour que tous les noms des wb"x" après l'onglet supprimé soit wb"x-1"?
youpiyoyo
Messages postés539Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention14 juillet 2010 18 août 2008 à 12:26
Salut
disons que tu supprimes l'index 3 et que ton premier onglet possede onglet0+wb0:
Imaginons une procedure de ce style avec en parametre l'index supprimé
DeleteTabControl(3)
Private Sub DeleteTabControl(ByVal index As Int16)
Dim tabindex As Int16
TabControl1.TabPages.RemoveAt(index)
For Each tb As TabPage In TabControl1.TabPages
tabindex = Val(Replace(tb.Name, "TabPage", ""))
If tabindex >= index Then
tabindex -= 1
tb.Name = "TabPage" & tabindex
Dim curwb As WebBrowser = TabControl1.TabPages("TabPage" & tabindex).Controls("wb" & tabindex + 1)
curwb.Name = "wb" & tabindex
End If
Next
End Sub
Je ne suis pas persuadé que c'est la meilleur façon pour toi de naviguer entre les onglets. mais bon voici la solution a ton précédent post.
@+
youpi :)