@-Franky- Genau.
@Peter329 Hier ist alles ohne Extra-Aufwand drinne:
Spoiler anzeigen
@'BitBrösel' Eine DLL lohnt sich erst bei mehreren Controls.
Hier ist das kompakt in einer einzigen Datei, die lässt sich leicht überall einfügen.
@Peter329 Hier ist alles ohne Extra-Aufwand drinne:
VB.NET-Quellcode
- Imports System.Drawing.Imaging
- Imports System.Runtime.InteropServices
- Friend Class ColorizedDGV : Inherits DataGridView
- Private Const WM_CTLCOLORSCROLLBAR As Integer = &H137
- <DllImport("gdi32.dll", EntryPoint:="CreatePatternBrush")> Private Shared Function CreatePatternBrush(ByVal hBitmap As IntPtr) As IntPtr : End Function
- <DllImport("gdi32.dll", EntryPoint:="CreateSolidBrush")> Private Shared Function CreateSolidBrush(ByVal crColor As Integer) As IntPtr : End Function
- <DllImport("gdi32.dll", EntryPoint:="DeleteObject")> Private Shared Function DeleteObject(ByVal hObject As IntPtr) As Integer : End Function
- Private ReadOnly hBmp As IntPtr = IntPtr.Zero
- Private ReadOnly hBrush As IntPtr = IntPtr.Zero
- Private ReadOnly hBmpBrush As IntPtr = IntPtr.Zero
- Private ReadOnly Bmp As Bitmap = Nothing
- Public Sub New()
- hBrush = CreateSolidBrush(&HFF00FF&)
- Bmp = New Bitmap(4, 4, PixelFormat.Format24bppRgb)
- Using G As Graphics = Graphics.FromImage(Bmp)
- G.FillRectangle(Brushes.Yellow, 0, 0, 2, 2)
- G.FillRectangle(Brushes.Red, 2, 2, 2, 2)
- End Using
- hBmp = Bmp.GetHbitmap
- hBmpBrush = CreatePatternBrush(hBmp)
- End Sub
- Protected Overrides Sub WndProc(ByRef m As Message)
- If m.Msg = WM_CTLCOLORSCROLLBAR Then
- Select Case m.LParam
- Case Controls(0).Handle '<-- das 1. Control im DGV ist die horizontale ScrollBar
- If Not Equals(hBrush, IntPtr.Zero) Then
- m.Result = hBrush
- End If
- Return
- Case Controls(1).Handle '<-- das 2. Control im DGV ist die vertikale ScrollBar
- If Not Equals(hBrush, IntPtr.Zero) Then
- m.Result = hBrush
- End If
- Return
- End Select
- End If
- MyBase.WndProc(m)
- End Sub
- Protected Overrides Sub Dispose(disposing As Boolean)
- If Not Equals(hBrush, IntPtr.Zero) Then DeleteObject(hBrush)
- If Not Equals(hBmpBrush, IntPtr.Zero) Then DeleteObject(hBmpBrush)
- If Not Equals(hBmp, IntPtr.Zero) Then DeleteObject(hBmp)
- Bmp.Dispose()
- MyBase.Dispose(disposing)
- End Sub
- End Class
Hier ist das kompakt in einer einzigen Datei, die lässt sich leicht überall einfügen.
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!
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!