none
Mouseover sur tabpage text RRS feed

  • Question

  • Bonjour a tous

    j'utilise ce code pour créer un x pour fermeture d'un tab dans un tabcontrol

     private void tc_DrawItem(object sender, DrawItemEventArgs e)
            {
                //This code will render a "x" mark at the end of the Tab caption. 
                e.Graphics.DrawString("X", e.Font, Brushes.Red, e.Bounds.Right - 18, e.Bounds.Top + 4);
                e.Graphics.DrawString(this.tc.TabPages[e.Index].Text, e.Font, Brushes.Black, e.Bounds.Left + 3, e.Bounds.Top + 5);
                e.DrawFocusRectangle();  
            }
    
            private void tc_MouseDown(object sender, MouseEventArgs e)
            {
                //Looping through the controls.
                for (int i = 0; i < this.tc.TabPages.Count; i++)
                {
                    Rectangle r = tc.GetTabRect(i);
                    //Getting the position of the "x" mark.
                    Rectangle closeButton = new Rectangle(r.Right - 18, r.Top + 5, 11, 11);
                    if (closeButton.Contains(e.Location))
                    {    
                        DialogResult reply = MessageBox.Show("Voulez-vous Fermer ce fichier?", Application.ProductName + " - Fermer le fichier.", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (reply == DialogResult.Yes)
                        {
                            if(rtf.Modified == false)
                            {
                                this.tc.TabPages.RemoveAt(i); 
                                break;
                            }
                            else
                            {
                                  DialogResult reply1 = MessageBox.Show("Le contenue a changé, voulez-l'enregistrer maintenant?", Application.ProductName + " - Fermer le fichier.", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                                  if (reply1 == DialogResult.Yes)
                                  {
                                      tbSave.PerformClick(); 
                                      this.tc.TabPages.RemoveAt(i);
                                      break;
                                  }
                                  else
                                  {
                                      this.tc.TabPages.RemoveAt(i);
                                      break;
                                  }
                            }                        
                        }
                        else
                        {
                            return;
                        }
                    }
                }
            }
    
            private void tc_MouseHover(object sender, EventArgs e)
            {  
                tc.Cursor = Cursors.Hand;  
            }

    comment faire pour seulement sur le X que le cursor change et non sur tout le tab

    Merci


    Daniel

    lundi 9 février 2015 21:30

Réponses

  • Merci pour la réponse plus vite que le MouseEnter mais sélectionne toujours tous le tab et non juste le X en rouge

    Daniel

    private void tc_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Y <= tc.ItemSize.Height)
                {
                    int w = 0;
                    for (int ti = 0; ti < tc.TabPages.Count; ti++)
                    {
                        w += tc.GetTabRect(ti).Width;
                        if (e.X < w)
                        {
                            tc.SelectedIndex = ti;
                            tc.Cursor = Cursors.Hand;
                            break;
                        }
                    }
                }
    
            }

    Merci
    • Modifié DanielMorais mardi 10 février 2015 14:17
    • Marqué comme réponse DanielMorais vendredi 13 février 2015 16:01
    mardi 10 février 2015 14:14
  • Bonjour,

    étant donné que le gestionnaire d'évènement MouseHover est attaché au TabControl, le X rouge réagit au moment du survol du TabControl.

    Puisque le X est de type String, il est difficile de lui attacher un gestionnaire MouseHover. Cependant, vous pouvez ajouter une condition qui détermine la position du curseur de la souris (avec l'argument MouseEventArgs) et ainsi faire les opérations que vous désirez.

    En espérant vous avoir mis sur la voie.


    Nimzozo, from France.

    • Marqué comme réponse DanielMorais vendredi 13 février 2015 16:00
    vendredi 13 février 2015 15:11

Toutes les réponses

  • Bonjour,

    private void yourTabControl_MouseMove(object sender, MouseEventArgs e)
            {
                TabControl tc=sender as TabControl;
                if (e.Y <= tc.ItemSize.Height)
                {
                      int w=0;
                      for(int ti=0;ti<tc.TabPages.Count;ti++)
                      {
                            w+=tc.GetTabRect(ti).Width;
                            if(e.X<w)
                            {
                                  tc.SelectedIndex=ti;
                                  break;
                            }
                      }
                }
            }

    mardi 10 février 2015 11:03
  • Merci pour la réponse plus vite que le MouseEnter mais sélectionne toujours tous le tab et non juste le X en rouge

    Daniel

    private void tc_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Y <= tc.ItemSize.Height)
                {
                    int w = 0;
                    for (int ti = 0; ti < tc.TabPages.Count; ti++)
                    {
                        w += tc.GetTabRect(ti).Width;
                        if (e.X < w)
                        {
                            tc.SelectedIndex = ti;
                            tc.Cursor = Cursors.Hand;
                            break;
                        }
                    }
                }
    
            }

    Merci
    • Modifié DanielMorais mardi 10 février 2015 14:17
    • Marqué comme réponse DanielMorais vendredi 13 février 2015 16:01
    mardi 10 février 2015 14:14
  • Bonjour,

    private void yourTabControl_MouseMove(object sender, MouseEventArgs e)
            {
                TabControl tc=sender as TabControl;
                if (e.Y <= tc.ItemSize.Height)
                {
                      int w=0;
                      for(int ti=0;ti<tc.TabPages.Count;ti++)
                      {
                            w+=tc.GetTabRect(ti).Width;
                            if(e.X<w)
                            {
                                  tc.SelectedIndex=ti;
                                  break;
                            }
                      }
                }
            }


    it still Always selects the entire tab I need the red X only

    Daniel

    mardi 10 février 2015 14:23
  • Bonjour,

    étant donné que le gestionnaire d'évènement MouseHover est attaché au TabControl, le X rouge réagit au moment du survol du TabControl.

    Puisque le X est de type String, il est difficile de lui attacher un gestionnaire MouseHover. Cependant, vous pouvez ajouter une condition qui détermine la position du curseur de la souris (avec l'argument MouseEventArgs) et ainsi faire les opérations que vous désirez.

    En espérant vous avoir mis sur la voie.


    Nimzozo, from France.

    • Marqué comme réponse DanielMorais vendredi 13 février 2015 16:00
    vendredi 13 février 2015 15:11