Skip to main content
added 142 characters in body; edited title
Source Link
Reza Aghaei
  • 126.2k
  • 18
  • 239
  • 447

Graphics drawn for Control(TextBox) is distorted/broken on resize [Because of Color.Transparent] TextBox with bottom border

I want to have TextBox with bottom border but Graphics drawn for TextBox is distorted/broken on resize because of Color.Transparent.

Using an code I found, I was able to create a underlined TextBox (Drawn Rectangle with tranparent top, left, right). The problem is when I resize the form/window: when I resize it to smaller, then resize again to expand it, the graphics drawn is distorted. Any fix for this?

Graphics drawn for Control(TextBox) is distorted/broken on resize [Because of Color.Transparent]

Using an code I found, I was able to create a underlined TextBox (Drawn Rectangle with tranparent top, left, right). The problem is when I resize the form/window: when I resize it to smaller, then resize again to expand it, the graphics drawn is distorted. Any fix for this?

TextBox with bottom border

I want to have TextBox with bottom border but Graphics drawn for TextBox is distorted/broken on resize because of Color.Transparent.

Using an code I found, I was able to create a underlined TextBox (Drawn Rectangle with tranparent top, left, right). The problem is when I resize the form/window: when I resize it to smaller, then resize again to expand it, the graphics drawn is distorted. Any fix for this?

Clear up my question.
Source Link
Imaginary
  • 773
  • 1
  • 15
  • 31

Graphics drawn for Control(TextBox) is distorted/broken on resize [Because of Color.Transparent]


EDIT :

I already found the issue, it's because of theColor.Transparent I fixed it by changing it to Color.White, since I have a white background. But then, that would not always be the case,how would I prevent that "Flickering/Tearing" while using Color.Transparent?

Graphics drawn for Control(TextBox) is distorted/broken on resize

Graphics drawn for Control(TextBox) is distorted/broken on resize [Because of Color.Transparent]


EDIT :

I already found the issue, it's because of theColor.Transparent I fixed it by changing it to Color.White, since I have a white background. But then, that would not always be the case,how would I prevent that "Flickering/Tearing" while using Color.Transparent?

Source Link
Imaginary
  • 773
  • 1
  • 15
  • 31

Graphics drawn for Control(TextBox) is distorted/broken on resize

Using an code I found, I was able to create a underlined TextBox (Drawn Rectangle with tranparent top, left, right). The problem is when I resize the form/window: when I resize it to smaller, then resize again to expand it, the graphics drawn is distorted. Any fix for this?

Here are photos: The second photo has been already resized smaller, then back to a larger size. NormalContracted then Expanded

Here's the 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); }