IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Obtenir l'onglet actif


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Nanos
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Par défaut Obtenir l'onglet actif
    Salut à tous ...

    J'ai un WebKitBrowser et un tabControl mais le problème c'est que cette ligne ne fait pas entièrement ce qu'elle est sensé faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabControl1.SelectedTab.Text = Convert.ToString(wb.DocumentTitle);
    Quand je compile, il n'y a que la première tabPage qui change de nom tandis que wb correspond au moteur de rendu dans une tabpage actif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public Form1()
    {
          InitializeComponent();
          WebKit.WebKitBrowser wb = GetSelectedWebBrowser();
          wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
    }
     
    private WebKit.WebKitBrowser GetSelectedWebBrowser()
    {
          foreach (Control ctl in tabControl1.SelectedTab.Controls)
          {
              WebKit.WebKitBrowser wb = ctl as WebKit.WebKitBrowser;
               if (wb != null)
                     return wb;
          }
          return null;
    }
     
    private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
          tabControl1.SelectedTab.Text = Convert.ToString(wb.DocumentTitle);
    }
    Comment faire pour que sa soit toutes les TabPages qui prennent le nom de la page qui est chargé dans le moteur de rendu.

    Le webkitbrowser fonctionne comme le webbrowser => j'avais le même problème quand j'utilisais celui déjà fournis par .NET

    Pouvez-vous m'aider SVP ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu ne t'abonnes à l'évènement DocumentCompleted que pour le premier browser, donc il n'est pas géré pour les autres browsers. Il faut s'abonner à l'évènement au moment où tu crées le browser, et non à l'initialisation de la Form.

    D'autre part, dans ton handler wb_DocumentCompleted, tu devrais te baser sur le sender, car wb pointe toujours sur le le browser qui déclenche l'évènement n'est pas forcément celui qui est actuellement sélectionné. En plus je pense que le code que tu as posté n'est pas complet, car la variable wb ne semble pas déclarée dans le contexte de ta méthode wb_DocumentCompleted...

    Perso je ferais plutôt quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
          WebKit.WebKitBrowser wb = sender as WebKit.WebKitBrowser;
          if (wb == null)
              return;
          TabPage tabPage = wb.Parent as TabPage;
          if (tabPage == null)
              return;
          tabPage.Text = wb.DocumentTitle;
    }
    Sinon, par curiosité : il fonctionne bien ce WebKitBrowser ? J'avais testé il y a quelques mois, ça semblait pas génial en terme de performance... ça s'est amélioré depuis ?

  3. #3
    Membre confirmé Avatar de Nanos
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Par défaut
    salut

    J'ai mit exactement ton code dans le wb_DocumentCompleted et sa ne change rien ...
    Par contre c'est vrais que mon wb_DocumentCompleted n'est pas abonné car l'historique ne fonctionne pas sur les autres tabPages ...

    Voici mon code sur tous les évenements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.IO;
     
    namespace Protom_Navigator
    {
        public partial class Form1 : Form
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
     
            public Form1()
            {
                InitializeComponent();
                WebKit.WebKitBrowser wb = GetSelectedWebBrowser();
                wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
                wb.Navigating += new WebBrowserNavigatingEventHandler(wb_Navigating);
            }
     
            //Quand page du navigateur actif a fini de charger
            private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                button3.Click +=new EventHandler(button3_Click);
                button3.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("button3.BackgroundImage")));
                WebKit.WebKitBrowser wb = GetSelectedWebBrowser();
                string url = Convert.ToString(wb.Url);
                if (url.StartsWith("https://"))
                {
                    textBox2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
                }
                if (url.StartsWith("ftp://") | ((url.EndsWith(".rar"))) && ((url.EndsWith(".zip"))))
                {
                    textBox2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));
                }
               string title = "Historique";
                TabPage myTabPage = new TabPage(title);
                try
                {
                    RichTextBox myRT = new RichTextBox();
                    myTabPage.Controls.Add(myRT);
                    myRT.Dock = DockStyle.Fill;
                    myRT.ReadOnly = true;
                    string dateetheure = Convert.ToString(DateTime.Now);
                    myRT.LoadFile("Historique.rtf");
                    string text = myRT.Text;
                    string urlh = Convert.ToString(wb.Url);
                    myRT.Text = "\n" + dateetheure + "  -  " + urlh + "  :  " + wb.DocumentTitle + text;
                    myRT.SaveFile("Historique.rtf");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    Clipboard.SetData(DataFormats.Text, ex.Message);
                }
                textBox2.Text = Convert.ToString(wb.Url);
                tabControl1.SelectedTab.Text = Convert.ToString(wb.DocumentTitle);
                button1.Enabled = wb.CanGoBack;
                button2.Enabled = wb.CanGoForward;
                button3.BackgroundImage = imageList2.Images[1];
                button3.Click += new EventHandler(button3_Click);
            }
     
            //Quand page du navigateur actif charge
            private void wb_Navigating(object sender, WebBrowserNavigatingEventArgs e)
            {
                WebKit.WebKitBrowser wb = GetSelectedWebBrowser();
                tabControl1.SelectedTab.Text = Convert.ToString("Chargement ...");
                button1.Enabled = wb.CanGoBack;
                button2.Enabled = wb.CanGoForward;
                button3.BackgroundImage = imageList2.Images[0];
                button3.Click += new EventHandler(button3_Click1);
            }
     
            //Quand changement d'onglet
            private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
            {
                WebKit.WebKitBrowser wb = GetSelectedWebBrowser();
                button1.Enabled = wb.CanGoBack;
                button2.Enabled = wb.CanGoForward;
            }
     
            //Permet de régler le blem avec els onglet et le moteur
            private WebKit.WebKitBrowser GetSelectedWebBrowser()
            {
                foreach (Control ctl in tabControl1.SelectedTab.Controls)
                {
                    WebKit.WebKitBrowser wb = ctl as WebKit.WebKitBrowser;
                    if (wb != null)
                        return wb;
                }
                return null;
            }
        }
    }
    Et pour ta question : il marche bien mais il faut faire tout sois même (les téléchargements, les page d'erreur, etc...). Il est à 99% pour le test acid3 : c'était plus bas avant ?

    EDIT : Sa fait rapport à un autre sujet mais quand tu as utilisé le webkitbrowser : as tu utiliser une progressBar pour afficher la progression de la page ou est-ce que tu sait comment récupérer le pourcentage de la progression de la page en un type de variable (ex : byte) ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Hades Shion Voir le message
    J'ai mit exactement ton code dans le wb_DocumentCompleted et sa ne change rien ...
    Par contre c'est vrais que mon wb_DocumentCompleted n'est pas abonné
    Ben cherche pas plus loin, c'est pour ça... il faut s'abonner à l'évènement pour tous les contrôles

    Citation Envoyé par Hades Shion Voir le message
    Et pour ta question : il marche bien mais il faut faire tout sois même (les téléchargements, les page d'erreur, etc...). Il est à 99% pour le test acid3 : c'était plus bas avant ?
    Aucune idée, ce n'est pas ce que je voulais tester

    Citation Envoyé par Hades Shion Voir le message
    EDIT : Sa fait rapport à un autre sujet mais quand tu as utilisé le webkitbrowser : as tu utiliser une progressBar pour afficher la progression de la page ou est-ce que tu sait comment récupérer le pourcentage de la progression de la page en un type de variable (ex : byte) ?
    Pas essayé...

  5. #5
    Membre confirmé Avatar de Nanos
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Par défaut
    Je en comprend pas mon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private WebKit.WebKitBrowser GetSelectedWebBrowser()
            {
                foreach (Control ctl in tabControl1.SelectedTab.Controls)
                {
                    WebKit.WebKitBrowser wb = ctl as WebKit.WebKitBrowser;
                    if (wb != null)
                        return wb;
                }
                return null;
            }
    et mon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebKit.WebKitBrowser wb = GetSelectedWebBrowser();
    sont sensés de s'occuper de tout les Browser dans les TabPage tandis que sur les autres onglet celà ne marche pas ? Et aussi ton code ne marche pas ... Ça ne change rien ...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Hades Shion Voir le message
    sont sensés de s'occuper de tout les Browser dans les TabPage
    Ben non, ça ne le fait que pour le browser qui est dans l'onglet actif... Il faudrait boucler sur tous les onglets, récupérer le browser, et s'abonner à son évènement DocumentCompleted pour chaque browser

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/12/2006, 06h42
  2. connaître le numéro de l'onglet actif
    Par chourmo dans le forum Delphi
    Réponses: 8
    Dernier message: 18/07/2006, 15h05
  3. JTabbedPane - Onglet actif
    Par Trillian dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 22/05/2006, 07h19
  4. Différente couleur pour l'onglet actif du menu css
    Par brotelle dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 12/04/2006, 10h18
  5. pbm onglet actif
    Par nine dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 15/12/2005, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo