TabControl1 Rahmenfarbe ändern.

  • VB.NET
  • .NET (FX) 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    TabControl1 Rahmenfarbe ändern.

    Moin! :)
    Ist es möglich die Farbe von einem TabControl1 zu ändern?
    Ich möchte die BackColor = Control Werte ändern.
    Aber leider sieht man immer noch diese Control Farbe (Siehe Bild).
    Ich hoffe ich könnte es gut erklären.
    Weiß jemand, ob dies machbar ist?
    BIG THX



    rahmenColorBug.zip
    Visual Basic.NET 8o
    MS-SQL
    8o
    @Cheffboss Du musst Dir Dein eigenes TabControl schreiben.
    Ich hänge Dir mal ne C#-Variante ran.
    Bei Deinen übeer 1000 Posts gehe ich davon aus, dass Du Dir das allein nach VB.NET übersetzen kannst.
    Spoiler anzeigen

    C#-Quellcode

    1. using System.Drawing;
    2. using System.Windows.Forms;
    3. using System;
    4. namespace ColorTabControl
    5. {
    6. public partial class ColTabControl
    7. : TabControl
    8. {
    9. public ColTabControl()
    10. {
    11. this.ItemSize = new Size(80, 30);
    12. this.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
    13. this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    14. }
    15. protected override void OnDrawItem(DrawItemEventArgs e)
    16. {
    17. Font font = null;
    18. Brush backBrush = null;
    19. Brush foreBrush = null;
    20. this.EraseBackground(e.Graphics);
    21. try
    22. {
    23. Rectangle bounds = e.Bounds;
    24. this.TabPages[e.Index].BackColor = Color.Silver;
    25. if (e.Index == this.SelectedIndex)
    26. {
    27. font = new Font(e.Font, e.Font.Style);
    28. backBrush = new SolidBrush(Color.DimGray);
    29. foreBrush = new SolidBrush(Color.White);
    30. bounds = new Rectangle(bounds.X + (this.Padding.X / 2), bounds.Y + this.Padding.Y, bounds.Width - this.Padding.X, bounds.Height - (this.Padding.Y * 2));
    31. }
    32. else
    33. {
    34. font = new Font(e.Font, e.Font.Style & ~FontStyle.Bold);
    35. backBrush = new SolidBrush(this.TabPages[e.Index].BackColor);
    36. foreBrush = new SolidBrush(this.TabPages[e.Index].ForeColor);
    37. }
    38. using (StringFormat sf = new StringFormat())
    39. {
    40. string tabName = this.TabPages[e.Index].Text;
    41. sf.Alignment = StringAlignment.Center;
    42. sf.LineAlignment = StringAlignment.Center;
    43. e.Graphics.FillRectangle(backBrush, bounds);
    44. e.Graphics.DrawString(tabName, font, foreBrush, bounds, sf);
    45. }
    46. }
    47. finally
    48. {
    49. if (backBrush != null) { backBrush.Dispose(); }
    50. if (foreBrush != null) { foreBrush.Dispose(); }
    51. if (font != null) { font.Dispose(); }
    52. }
    53. }
    54. #region Private Stuff
    55. /// <summary>
    56. /// Löschen des kompletten Hintergrundes der Reiter-Fläche,
    57. /// nicht aber der Reiter selbst
    58. /// </summary>
    59. private void EraseBackground(Graphics g)
    60. {
    61. using (Region reg = new Region(this.ClientRectangle))
    62. {
    63. // Höhe des Reiter-Bereichs, dynamisch, MultiLine
    64. int bottom = 0;
    65. for (int i = 0; i < this.TabPages.Count; i++)
    66. {
    67. Rectangle tabRect = this.GetTabRect(i);
    68. reg.Exclude(tabRect);
    69. bottom = Math.Max(bottom, tabRect.Bottom);
    70. }
    71. // Fläche der Tabs und des Rahmens stehenlassen
    72. Rectangle rect = new Rectangle(0, bottom, this.ClientRectangle.Width, this.ClientRectangle.Height - bottom);
    73. reg.Exclude(rect);
    74. using (Brush brush = new SolidBrush(Color.DodgerBlue))
    75. {
    76. g.FillRegion(brush, reg);
    77. }
    78. }
    79. }
    80. #endregion Private Stuff
    81. }
    82. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!