Je voudrais savoir s'il existe un moyen de rendre l'arrière-plan d'un TabControl transparent (le TabControl, pas les TabPages), au lieu de prendre la couleur d'arrière-plan du formulaire parent. J'ai quelques formes avec la peinture personnalisée où je dessine un dégradé en arrière-plan mais ce dégradé ne peint pas derrière les tabcontrols. J'ai essayé de définir TabControl.Backcolor = Color.Transparent mais il me dit que ce n'est pas supporté. J'utilise VS2005 et framework 2.0. (le style de jeu n'aide pas) Est-ce que quelqu'un a une bonne solution à ce problème?Arrière-plan transparent TabControl
Répondre
Selon le this thread on msdn, le tabcontrol ne prend pas en charge le changement de backcolor en transparent, mais vous pouvez supposément remplacer la méthode drawitem.
onglet personnalisés conrol:
[DllImport("uxtheme", ExactSpelling = true)]
public extern static Int32 DrawThemeParentBackground(IntPtr hWnd, IntPtr hdc, ref Rectangle pRect);
protected override void OnPaintBackground(PaintEventArgs e)
{
if (this.BackColor == Color.Transparent)
{
IntPtr hdc = e.Graphics.GetHdc();
Rectangle rec = new Rectangle(e.ClipRectangle.Left,
e.ClipRectangle.Top, e.ClipRectangle.Width, e.ClipRectangle.Height);
DrawThemeParentBackground(this.Handle, hdc, ref rec);
e.Graphics.ReleaseHdc(hdc);
}
else
{
base.OnPaintBackground(e);
}
}
Je vais étendre réponse Golan
Vous pouvez utiliser DrawThemeParentBackground faire la plupart des emplois (comme il est inactif?). Créer TabControl personnalisé:
[System.ComponentModel.DesignerCategory("Code")]
public class MyTabControl : TabControl
{
[DllImport("uxtheme", ExactSpelling = true)]
public extern static Int32 DrawThemeParentBackground(IntPtr hWnd, IntPtr hdc, ref Rectangle pRect);
// use with care, as it may cause strange effects
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
public MyTabControl() { }
protected override void OnPaintBackground(PaintEventArgs e)
{
IntPtr hdc = e.Graphics.GetHdc();
Rectangle rect = ClientRectangle;
DrawThemeParentBackground(this.Handle, hdc, ref rect);
e.Graphics.ReleaseHdc(hdc);
}
}
et définir explicitement pour chaque TabPage
BackColor=Transparent
(dans Designer ou pendant l'exécution, si vous ne le faites pas - s TabPage
de » auront un fond blanc). Fonctionne comme un miracle, TabControl transparent sans scintillement dont je rêvais.
Vous devez définir explicitement BackColor des pages d'onglet sur Transparent, même si cela est déjà indiqué dans le concepteur. Sinon, vous pouvez surcharger 'OnCreateControl()' et faire une boucle dans la collection TabPages, en définissant 'BackColor' sur' Color.Transparent'. – dabide
Oui, «explicitement» est le mot juste, merci. Une autre chose, soyez prudent avec 'CreateParams' (peut-être le supprimer complètement), car cela peut causer des problèmes étranges. Cela reviendrait à scintiller si>< – Sinatr
Comme explained on MSDN, vous devriez
- Vérifiez si
Application.RenderWithVisualStyles
renvoie true - ont la propriété de TabPage
UseVisualStyleBackColor
définie sur true - ont la propriété TabControl
Appearance
mis àNormal
alors votre TabPage doit avoir un arrière-plan transparent.
- 1. C#: transparent dans tabControl
- 2. TabControl sans bordure wpf (XP)
- 3. Fond transparent - pas complètement transparent
- 4. Tabcontrol select
- 5. WPF TabControl XP Styling Problème
- 6. C# TabControl TabPage Change
- 7. .net tabcontrol tab tailles
- 8. Masquer l'en-tête TabControl
- 9. Ajax TabControl chargement lentement
- 10. ASP.Net AJAX TabControl
- 11. Bitmap transparent
- 12. onglets en bas de TabControl
- 13. TabControl Ajouter est très lent
- 14. Plusieurs instances userControl dans tabControl
- 15. WPF TabControl Liaison de données
- 16. override C# Méthode TabControl add
- 17. Pixel cintreuse Blanc Transparent
- 18. Div fond transparent
- 19. C# Transparent GUI
- 20. Transparent Swing Windows
- 21. Fond IE et transparent
- 22. Dessin d'un bouton transparent
- 23. Winform transparent avec l'image
- 24. Fond transparent Iframe
- 25. AWTUtilities Transparent JFrame
- 26. sIFR 3: Fond transparent?
- 27. Qt: QRubberBand transparent?
- 28. Création d'un panneau transparent
- 29. Transparent custom UITableViewCell
- 30. particulièrementCartes-Draw transparent
J'ai supprimé l'instruction if/else de votre code d'origine car TabControl ne semblait pas avoir de propriété BackColor, même s'il a un événement OnBackColorChanged – series0ne
, mais que vous devez effectuer un contrôle de tabulation personnalisé. Cependant, j'ai essayé de faire '[Browsable (true)] public nouveau Color BackColor { get {return base.BackColor; } set {base.BackColor = valeur; } } ', mais pour certaines raisons, je ne peux pas changer' BackColor' de mon 'TabControl', il est toujours bloqué sur' SystemColors.Control', donc il semble que ce 'si 'n'a pas beaucoup de sens. – Sinatr
@Sinatr, 'BackColor' est substituée dans' TabControl', et retourne toujours 'SystemColors.Control'. Je suppose que vous avez déjà compris, compte tenu de votre réponse ci-dessous. – dabide