tamaño - C#: ¿Cómo arrastrar desde el formulario y sus controles?
controles de windows forms c# (2)
En realidad, encontré la solución aquí .
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HTCAPTION = 0x2;
[DllImport("User32.dll")]
public static extern bool ReleaseCapture();
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
// Paste the below code in the your label control MouseDown event
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
funciona.
Además, en mi código anterior, si se desea redimensionar, la instrucción if debería cambiarse a
if (m.Msg == WM_NCHITTEST)
if ((int)m.Result == HTCLIENT)
m.Result = (IntPtr)HTCAPTION;
Utilizo el siguiente código para arrastrar formulario sin bordes haciendo clic y arrastrando el formulario. Funciona, pero no para cuando hace clic y arrastra un control ubicado en el formulario. Necesito poder arrastrarlo al hacer clic en algunos de los controles, pero no en otros, arrastrar por etiquetas, pero no por botones y cuadros de texto. ¿Cómo lo hago?
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_NCHITTEST = 0x84;
const int HTCLIENT = 0x1;
const int HTCAPTION = 0x2;
if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT)
m.Result = (IntPtr)HTCAPTION;
}
Use Spy ++ para analizar qué controles están recibiendo qué Mensajes de Windows, entonces sabrá lo que necesita capturar.
Sin mirar profundamente su código, me imagino que los controles secundarios en la ventana principal están recibiendo mensajes en lugar del formulario y desea responder a algunos de ellos específicamente.