Utiliza un panel mete los botones que desees. ten en cuenta sus dimensiones así como su posición.
Luego suponiendo que el contenedor del panel contenedor del menú, es el formulario sólo tienes que escribir el código correspondiente al evento 'mouso.move', examina si está situado 'x' píxeles al lado del formulario (que quieres que sea sensible) y controlando la altura, cuando dé positivo utiliza un bucle con retardo para emerger el panel, la velocidad de aparición y el modo es cosa tuya, puedes hacerlo instantáneo con un 'panel.left=x' o con un bucle pausadamente moviendo 'x' písels en cada ciclo, esto requeríría un retardo para que exista la sensación de deslizamiento.
El código del área sensible sería más o menos algo como:
' esta función sería invocada desde mouse move del contenedor del panel que aloja el menú:
' posRaton es una estructura de tipo point, que tiene un valor x y otro Y de la posición del ratón, cazado en el evento mousemove.
' Limites es tambien una estructura point, si el menú se oculta en la derecha limite.X define el píxel más a la izquierda tal que siendo pisado consideremos qeu es sensible, límite.Y define el punto vertical de posición del panel, y margenVertical la altura del panel, por tanto sumado a su 'top' indica el píxel más bajo con área de influencia para activar el panel del menú.
public function validar_AreaSensible(posRaton as point(), limites as point() as integer, margenVertical as byte) as boolean
if (posraton.X <= limite.X) and (posRaton.Y >= limite.Y or posRaton.Y <= (limite.Y + margenVertical)) then return true
end function
Si la función devuelve true, significa que se debería 'sacar' el menú....
El menú podría recogerse al perder el foco el panel, salvo que se fijara una 'chincheta'.... la chincheta es un simple checkbox, que usa una imagen a propósito que cambia según sea su valor, para reflejar el estado.
Si el panel tuviera pongamos 100 píxeles de ancho haríamos algo como:
public sub mover_MenuLateral(sentido as boolean)
if sentido=true then ' lo sacamos
dirección=1
ini=-100
fin=0
else ' si lo metemos
direccion=-1: ini=0 : fin=-100
end if
for k as integer= ini to fin step (direccion * -1)
panel1.left += direccion
do
System.Windows.Forms.DoEvents
loop while Timer1.enabled=true
Timer1.enabled=true
next
end sub
public sub Timer1_Tick.......
timer1.enabled=false
end sub