C# CheckBox Glyph Bordercolor ändern

  • C#

    C# CheckBox Glyph Bordercolor ändern

    Hier alternative Lösung (nicht ganz optimal):

    C#-Quellcode

    1. protected override void OnPaint(PaintEventArgs pevent)
    2. {
    3. base.OnPaint(pevent);
    4. var g = pevent.Graphics;
    5. var size = CheckBoxRenderer.GetGlyphSize(g, CheckBoxState.UncheckedNormal);
    6. var rec = new Rectangle(new Point(0,2), new Size(size.Width, size.Height));
    7. g.DrawRectangle(new Pen(borderColor), rec);
    8. }



    Org. Thread:

    Spoiler anzeigen
    Hallo Leute,

    ich versuche das Kästchen einer Checkbox nach zu zeichnen in anderer Farbe.

    Ich habe mir mit abgewandelter Version vom Code unten bereits eine TextBox mit Bordercolor gemacht.
    Bei der Checkbox will es aber nicht klappen...

    Er wirft keinen Fehler und er macht auch alles was im Code steht, aber am ende sieht die CheckBox immer noch so aus wie vorher...

    Spoiler anzeigen

    C#-Quellcode

    1. using System;
    2. using System.Drawing;
    3. using System.Windows.Forms;
    4. using System.Runtime.InteropServices;
    5. using System.Windows.Forms.VisualStyles;
    6. public class BorderCheckbox : CheckBox
    7. {
    8. private const int WM_NCPAINT = 0x85;
    9. private const uint RDW_INVALIDATE = 0x1;
    10. private const uint RDW_IUPDATENOW = 0x100;
    11. private const uint RDW_FRAME = 0x400;
    12. [DllImport("user32.dll")]
    13. private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
    14. [DllImport("user32.dll")]
    15. private static extern bool RedrawWindow(IntPtr hWnd, IntPtr lprc, IntPtr hrgn, uint flags);
    16. [DllImport("user32.dll")]
    17. private static extern IntPtr GetWindowDC(IntPtr hWnd);
    18. private Color borderColor;
    19. public Color BorderColor
    20. {
    21. get { return borderColor; }
    22. set { borderColor = value;
    23. RedrawWindow(Handle, IntPtr.Zero, IntPtr.Zero,
    24. RDW_FRAME | RDW_IUPDATENOW | RDW_INVALIDATE);
    25. }
    26. }
    27. protected override void WndProc(ref Message m)
    28. {
    29. base.WndProc(ref m);
    30. if (m.Msg == WM_NCPAINT && BorderColor != Color.Transparent)
    31. {
    32. var hdc = GetWindowDC(Handle);
    33. using (var g = Graphics.FromHdcInternal(hdc))
    34. {
    35. var size = CheckBoxRenderer.GetGlyphSize(
    36. g, CheckBoxState.UncheckedNormal);
    37. using (var p = new Pen( BorderColor ))
    38. g.DrawRectangle(p, new Rectangle( 4,4,size.Width-1,size.Height-1 ));
    39. }
    40. ReleaseDC(Handle, hdc);
    41. }
    42. }
    43. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Petersilie“ ()