Redimensionar controles en tiempo de ejecución.Les traigo este código para cambiar el tamaño de un control en tiempo de ejecución desde sus bordes, primero la librería:
using System.Runtime.InteropServices;
Ahora declaramos las APIs y sus constantes:
-------------------------------------------------------
[DllImport("user32.DLL", EntryPoint = "GetWindowLong")]
static extern int GetWindowLong(
int hWnd,
int nIndex);
[DllImport("user32.DLL", EntryPoint = "SetWindowLong")]
static extern int SetWindowLong(
int hWnd,
int nIndex,
int dwNewLong);
[DllImport("user32.DLL", EntryPoint = "SetWindowPos")]
static extern bool SetWindowPos(
int hWnd,
int hWndInsertAfter,
int X,
int Y,
int cx,
int cy,
uint uFlags);
const int GWL_STYLE = (-16);
const int WS_THICKFRAME = 0x40000;
const int SWP_DRAWFRAME = 0x20;
const int SWP_NOMOVE = 0x2;
const int SWP_NOSIZE = 0x1;
const int SWP_NOZORDER = 0x4;
-------------------------------------------------------
Ahora dentro del evento MouseDown de algún control ponemos el siguiente código:
-------------------------------------------------------
- Código:
-
if (e.Button == MouseButtons.Right)
{
Control control = (Control)sender;
try
{
int Style = GetWindowLong(control.Handle.ToInt32(), GWL_STYLE);
if ((Style & WS_THICKFRAME) == WS_THICKFRAME)
{
Style = Style ^ WS_THICKFRAME;
}
else
{
Style = Style | WS_THICKFRAME;
}
SetWindowLong(control.Handle.ToInt32(), GWL_STYLE, Style);
SetWindowPos(control.Handle.ToInt32(), this.Handle.ToInt32(), 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOMOVE | SWP_DRAWFRAME);
}
catch { }
}
-------------------------------------------------------
Listo, ahora solo le damos click derecho y podemos redimensionarlo. saludos a todos!