Cuadro de texto con borde inferior
quiero tenerTextBox
con borde inferior pero gráficos dibujados paraTextBox
está distorsionado / roto al cambiar el tamaño debido aColor.Transparent
.
Utilizando un código que encontré, pude crear un TextBox subrayado (Rectángulo dibujado con parte superior transparente, izquierda, derecha). El problema es cuando cambio el tamaño del formulario / ventana: cuando lo cambio a un tamaño más pequeño, luego lo cambio nuevamente para expandirlo, los gráficos dibujados se distorsionan.¿Alguna solución para esto?
Aquí hay fotos:La segunda foto ya ha sido redimensionada más pequeña, luego de vuelta a un tamaño más grande.
Aquí está el código:
[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
Lo arreglé cambiándolo a Color. Blanco, ya que tengo un fondo blanco. Pero entonces, ese no siempre sería el caso,¿Cómo podría evitar ese "parpadeo / desgarro" mientras uso Color.Transparent?