2010-09-19 8 views
8

Je crée une barre de menu contextuel lors du clic droit sur un onglet sélectionné ou non sélectionné dans la barre d'onglets d'un tabcontrol winforms. Il va fermer, et fermer tout sauf ça pour l'instant. Quoi qu'il en soit, je dois être capable de capturer quel onglet la souris est terminée lorsque le clic droit est pressé. Quelqu'un sait comment?Comment puis-je savoir sur quel onglet je fais un clic droit dans winforms tabcontrol?

Une autre solution que j'accepte est celle qui sélectionne l'onglet non sélectionné avec un clic droit avant que le menu contextuel ne soit affiché.

Répondre

16

Dans votre événement clic de souris, vous pouvez ajouter ce code pour le trouver, si tabs est votre tabcontrol

for (int i = 0; i < tabs.TabCount; ++i) { 
    if (tabs.GetTabRect(i).Contains(e.Location)) { 
     //tabs.Controls[i]; // this is your tab 
    } 
} 
+0

cela semble être ce que je veux, je vais upvote/accepter quand je le fais fonctionner! –

+0

fonctionne, merci mon pote! –

+0

@IsaacB: np, gl avec le reste :) – Patrick

0

Le paramètre sender du gestionnaire d'événements vous donne généralement l'objet que vous avez cliqué.

void whatever_OnClick(object sender, EventArgs e) { 
    var tab = sender as TabControlClassHere; 
} 
+1

Il me dit le tabcontrol sur lequel j'ai cliqué, ce qui n'aide pas. Il n'y a qu'un seul tabcontrol! Merci quand même pour la suggestion! –

4

Cela pourrait aider, il capture la position de votre clic droit avec la souris et si elle est sur le rectangle de chaque onglet, cet onglet sera sélectionné et obtenir du menu de droite pour être montré

private void tabControl1_MouseClick(object sender, MouseEventArgs e) 
{ 
     if (e.Button == MouseButtons.Right) 
    { 
      for (int i = 0; i < tabs.TabCount; ++i) 

       { 

       if (tabs.GetTabRect(i).Contains(e.Location)) 
        { 

       tabControl1.SelectTab(i); 

       this.contextMenuStrip1.Show(this.tabControl1, e.Location); 

        } 

       } 
    } 
} 

Amusez-vous :)

Questions connexes