TextBox с нижней границей

я хочу иметьTextBox с нижней границей, но графика дляTextBox искажен / сломан при изменении размера из-заColor.Transparent.

Используя код, который я нашел, я смог создать подчеркнутый TextBox (Drawn Rectangle с прозрачным верхом, слева, справа). Проблема заключается в том, что я изменяю размер формы / окна: когда я изменяю его размер на меньший, а затем снова изменяю его размер, чтобы расширить его, нарисованная графика искажается.Любое исправление для этого?

Вот фотографии:Размер второй фотографии уже уменьшен, а затем увеличен.

Вот код:

[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);
    }


РЕДАКТИРОВАТЬ :Я уже нашел проблему, это из-заColor.Transparent Я исправил это, изменив его на Color.White, так как у меня белый фон. Но тогда, это не всегда будет так,Как я могу предотвратить это "мерцание / разрыв" при использовании Color.Transparent?

Ответы на вопрос(1)

Ваш ответ на вопрос