Cambiar el estilo de WinForm frontera?

Es posible cambiar el estilo de un WinForm frontera? Sé que si la frontera se quita, quita la funcionalidad para cambiar el tamaño del programa. Por lo tanto, hay una manera de cambiar el estilo de ella, pero hazlo de tamaño variable?

InformationsquelleAutor Joey Morani | 2010-04-10

4 Kommentare

  1. 1

    Primera de escribir esto en el InitializeComponent():

    public const int WM_NCLBUTTONDOWN = 0xA1;
    public const int HT_RIGHT = 0xB;
    
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    
    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
    [DllImport("user32.dll")]
    public static extern bool ReleaseCapture();
    
    this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Resize_Form);

    A continuación, utilice un método similar a este. En este caso, mi forma es sólo de tamaño variable desde el lado derecho, pero debe ser fácil de hacer es cambiar el tamaño de cualquier lado:

        private void Resize_Form(object sender, MouseEventArgs e)
        {
            if ((e.Button == MouseButtons.Left) && (MousePosition.X >= this.Location.X + formWidth - 10))
            {
                System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.SizeWE;
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_RIGHT, 0);
                formWidth = this.Width;
            }
        }
  2. 0

    No creo que hay una forma directa de hacer esto.

    Pero, se podría establecer la forma de estilo de borde a Ninguno.
    Y aplicar el cambio de tamaño en su forma(que no creo que su difícil)

    • Cambio de tamaño puede no ser trivial debido a que el cursor no cambia ya que el tamaño del cursor cuando se mueva el ratón a los bordes de la forma.
    • Podría tal vez poner un panel sobre mi forma, como la imagen de arriba. Y luego tener que cambiar el tamaño de mi forma cuando alguien se cambia el tamaño del panel? Yo podría hacer el Anclaje del panel a la parte superior, inferior, izquierda y derecha siempre sería el mismo tamaño como en la forma. ¿Sabes de algún código que podría utilizar para hacer esto?
    • cursor de cambio será la más fácil de lo que uno jamás podría hacer.
    • usted podría hacer lo que usted sugiere. pero usted no necesita eso. usted podría eazily dibujar un rectángulo en el formulario y compruebe si el ratón pos se superpone el rectángulo en el Evento MouseMove del formulario. Si se solapa cambiar el cursor y realizar la lógica para cambiar el tamaño del formulario
    • Por favor, ¿podría dar algún ejemplo de código? ¿Cómo puedo obtener el formulario para cambiar el tamaño? Gracias.
    • oops, no tenía yo claro – se refería a que el manual de código de cambio de tamaño, no el cambio de cursor – @Veer y su sugerencia de sonido buena.

  3. 0
    string position = String.Empty;
    Point mouseDownPosition = new Point();
    
    private void myForm_MouseDown(object sender, MouseEventArgs e)
    {
        position = (e.X == 0) ? "Left" : ((e.X == myForm.Width) ? "Right" : String.Empty;
        position += (e.Y == 0) ? "Top" : ((e.Y == myForm.Height) ? "Bottom" : String.Empty;
        if(position != String.Empty)
        {
            mouseDownPosition = e.Location;
        }
    }
    
    private void myForm_MouseMove(object sender, MouseEventArgs e)
    {
        if(position != String.Empty)
        {        
            Point movementOffset = new Point(e.Location.X - mouseDownPosition.X, e.Location.Y - mouseDownPosition.Y);
            Switch(position)
            {
                Case "LeftTop":
                    myForm.Location.X += movementOffset.X;
                    myForm.Location.Y += movementOffset.Y;
                    myForm.Width -= movementOffset.X;
                    myForm.Height -= movementOffset.Y;
                Case "Left":
                    myForm.Location.X += movementOffset.X;
                    myForm.Width -= movementOffset.X;
                //Complete the remaining please :)
            }
        }
    }
    
    private void myForm_MouseUp(object sender, MouseEventArgs e)
    {
        position = String.Empty;
    }

    P. S: no Han probado

    La esperanza de que hayas establecido FormBorderStyle a Ninguno

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea