TextBox mit unterem Rand

Ich möchte habenTextBox mit unterem Rand, aber Grafiken gezeichnet fürTextBox ist bei Größenänderung verzerrt / defekt wegenColor.Transparent.

Mit einem gefundenen Code konnte ich eine unterstrichene TextBox (Drawn Rectangle mit transparenter Oberseite, links, rechts) erstellen. Das Problem ist, wenn ich die Größe des Formulars / Fensters verändere: Wenn ich es verkleinere und dann erneut vergrößere, wird die gezeichnete Grafik verzerrt. Irgendwelche Fehler behoben?

Hier sind Fotos:Das zweite Foto wurde bereits verkleinert und dann wieder vergrößert.

Hier ist der Code:

[DllImport("user32")]
    private static extern IntPtr GetWindowDC(IntPtr hwnd);
    struct RECT {
        public int left, top, right, bottom;
    }
    struct NCCALSIZE_PARAMS {
        public RECT newWindow;
        public RECT oldWindow;
        public RECT clientWindow;
        IntPtr windowPos;
    }

    float clientPadding = 0;
    int actualBorderWidth = 2;
    Color borderColor = Color.Black;
    protected override void WndProc(ref Message m) {
        //We have to change the clientsize to make room for borders
        //if not, the border is limited in how thick it is.
        if (m.Msg == 0x83) { //WM_NCCALCSIZE 
            if (m.WParam == IntPtr.Zero) {
                RECT rect = (RECT)Marshal.PtrToStructure(m.LParam, typeof(RECT));
                rect.left += 2;
                rect.right -= 2;
                rect.top += 0;
                rect.bottom -= 0;// (int)clientPadding;
                Marshal.StructureToPtr(rect, m.LParam, false);
            } else {
                NCCALSIZE_PARAMS rects = (NCCALSIZE_PARAMS)Marshal.PtrToStructure(m.LParam, typeof(NCCALSIZE_PARAMS));
                rects.newWindow.left += (int)clientPadding;
                rects.newWindow.right -= (int)clientPadding;
                rects.newWindow.top += (int)clientPadding;
                rects.newWindow.bottom -= 2;
                Marshal.StructureToPtr(rects, m.LParam, false);
            }
        }
        if (m.Msg == 0x85) {//WM_NCPAINT    
            IntPtr wDC = GetWindowDC(Handle);
            using (Graphics g = Graphics.FromHdc(wDC)) {
                ControlPaint.DrawBorder(g, new Rectangle(0, 0, Size.Width, Size.Height),
                    Color.Transparent, 1, ButtonBorderStyle.Solid,
                    Color.Transparent, 1, ButtonBorderStyle.Solid,
                    Color.Transparent, 1, ButtonBorderStyle.Solid,
                    borderColor, actualBorderWidth, ButtonBorderStyle.Solid);
            }
            return;
        }
        base.WndProc(ref m);
    }


EDIT:Ich habe das Problem bereits gefunden, es liegt amColor.Transparent Ich habe es behoben, indem ich es in Color.White geändert habe, da ich einen weißen Hintergrund habe. Aber dann wäre das nicht immer der Fall,wie kann ich das "Flackern / Zerreißen" bei der Verwendung von Color.Transparent verhindern?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage