2009-10-22 4 views
0

J'écris actuellement un contrôle de tabulation personnalisé. J'ai créé mon propre contrôle au lieu de dessiner le TabControl, car je pensais que ce serait plus rapide et plus flexible. Mon contrôle de tabulation lui-même styles après le contrôle de tabulation VS2008; c'est-à-dire, lorsqu'un onglet est sélectionné, une partie de cet onglet se trouve devant d'autres onglets non sélectionnés.Le contrôle personnalisé ne rendra pas les contrôles derrière lui même s'il est transparent

Mon contrôle de tabulation se compose d'un panneau contenant tous mes objets TabButton qui sont eux-mêmes les tabs eux-mêmes. J'ai mis le TabButton être transparent comme ceci:

public TabButton() 
{ 
    ... 
    SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); 
    UpdateStyles(); 
    this.BackColor = Color.Transparent; 
} 

Toutefois, lorsque l'onglet est sélectionné et devant un autre onglet, la partie de l'onglet désélectionné qui doit apparaître derrière la partie de l'onglet sélectionné est non rendu. C'est la couleur standard SystemColors.Control qui remplit le reste du rectangle de découpe pour le bouton sélectionné.

Comment puis-je obtenir une transparence adéquate dans mon contrôle personnalisé?

Aussi: TabButton hérite de Control, c'est pourquoi j'ai dû utiliser SetStyle pour utiliser la transparence.

-Eric Smith

Répondre

1

Jetez un oeil à ceci: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

dernière, je .NET Windows Forms, il n'a pas été évident que vous avez besoin de faire un peu de ces hacks pour obtenir psuedo transparence travail. Je ne sais pas s'ils l'ont changé au cours des trois dernières années, mais je me souviens d'avoir fait quelque chose comme ça. Je voudrais essayer explicitement de ne pas dessiner un arrière-plan en premier.

+0

Cela fonctionne dans une certaine mesure. Vous verrez ce que je veux dire: Avant 'Hack': http://i34.tinypic.com/35mp8xd.png Après 'Hack': http://i36.tinypic.com/351e8fq.png Notez les deux avant et après les photos sont sans SetStyle() utilisé. En outre, j'essaie d'utiliser BringToFront() sur l'onglet sélectionné afin qu'il rende à l'avant, mais cela semble ne rien faire. Bien que cela ait vraiment aidé, cela n'a créé qu'un autre problème: P –

+0

En cherchant plus, même en ajoutant le TabButton mort en dernier et après ma boucle de contrôle-ajout, il semble toujours le rendre avec un z-index sous les autres onglets, même si j'ai spécifiquement appelé BringToFront(). –

+0

Alors ... vous aviez raison. En réécrivant une partie de mon code, cela a miraculeusement fonctionné. Ma conjecture est que je l'ai accidentellement ajouté à "ceci" au lieu de tabPanel, ou c'était un miracle. De toute façon, merci monsieur! :) –

Questions connexes