Si Tengo un formulario sin bordes y le quiero poner un picture box como border.
No, esa no es la manera indicada de intentar simular un borde. De forma natural un control no puede sobresalir (visiblemente hablando) fuera de los límites (
bounds) del contenedor padre de dicho control, es decir, el
Form.
Sencillamente puedes recurrir a
GDI+ para dibujar un borde alrededor de la ventana del Form. Luego puedes capturar cuando el usuario presiona click para responder al mensaje de ventana
WM_NCHITTEST en el que puedes "falsificar" el identificador de la parte de la ventana que corresponde a las coordenadas donde se hizo click, y así simular que se presionó click izquierdo sobre una
borde barra de título (
titlebar) para iniciar la operación de arrastrar/mover la ventana del Form...
EDITO: O bien si lo prefieres puedes hacer eso mismo siguiendo la misma metodología que he descrito arriba pero para que en vez de mover la ventana lo que haga sea iniciar una operación de redimensionar (resize) el Form al presionar click sobre uno de los "bordes", aunque ello requeriría algo más de trabajo de implementación que lo que escribí en este código de aquí abajo.
...¿Y cómo se hace todo eso?, pues así:
Public NotInheritable Class Form1 : Inherits Form
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.FormBorderStyle = FormBorderStyle.None
End Sub
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
' Asegúrate de escribir un valor de longitud que sea número par, para que encaje correctamente en los offsets.
Using pen As New Pen(Color.LimeGreen, SystemInformation.FrameBorderSize.Width)
e.Graphics.DrawRectangle(pen, Me.DisplayRectangle)
End Using
End Sub
Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
If (e.Button = MouseButtons.Left) Then
NativeMethods.ReleaseCapture()
NativeMethods.SendMessage(Me.Handle, NativeMethods.WindowsMessages.WM_NCLBUTTONDOWN,
New IntPtr(NativeMethods.NcHitTestFlags.HT_CAPTION), IntPtr.Zero)
End If
End Sub
End Class
Friend NotInheritable Class NativeMethods
Private Sub New()
End Sub
' https://msdn.microsoft.com/en-us/library/windows/desktop/ff381405(v=vs.85).aspx
Friend Enum WindowsMessages As Integer
WM_NCLBUTTONDOWN = &HA1
End Enum
' https://msdn.microsoft.com/en-us/library/windows/desktop/ms645618(v=vs.85).aspx
Friend Enum NcHitTestFlags As Integer
HT_CAPTION = &H2
End Enum
' https://msdn.microsoft.com/en-us/library/windows/desktop/ms646261(v=vs.85).aspx
<DllImport("user32.dll")>
Friend Shared Function ReleaseCapture() As Boolean
End Function
' https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx
<DllImport("user32.dll", EntryPoint:="SendMessage", SetLastError:=True)>
Friend Shared Function SendMessage(
<MarshalAs(UnmanagedType.SysInt)> ByVal hwnd As IntPtr,
<MarshalAs(UnmanagedType.U4)> ByVal msg As WindowsMessages,
<MarshalAs(UnmanagedType.SysInt)> ByVal wParam As IntPtr,
<MarshalAs(UnmanagedType.SysInt)> ByVal lParam As IntPtr
) As Integer
End Function
End Class
que código le pongo al picturebox para que haga la funcion de borde. ?
La próxima vez no pidas tanto código así como si esto fuese un servicio gratis de entrega de códigos a domicilio con una base de datos de códigos en oferta para cualquier ocasión especial del año...
En general pedir "códigos" está muy mal visto internacionálmente en el mundillo de la programación..
Trata de buscar un poco antes de preguntar, que son cosas sencillas las que pides y podrías investigar por Google o donde sea y acabar hallando una solución. No te lo van a dar todo siempre hecho.PD: Lo siento pero tenía que decirlo.
Saludos