Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Información
El tema que ha solicitado se muestra abajo. Sin embargo, este tema no se encuentra en la biblioteca.

Cómo: Crear formularios Windows Forms no rectangulares

Antes, la creación de formularios no rectangulares era un proceso que requería mucho trabajo y tiempo, y que implicaba llamadas API y grandes esfuerzos de programación. Pero esto ya no es así.

Nota Nota

Tenga en cuenta que este proceso supone mucho procesamiento de gráficos para el hardware implicado; por tanto, el rendimiento variará según la memoria y la tarjeta gráfica de cada equipo. Cuando las aplicaciones impliquen dibujos personalizados, pruebe siempre con varias tarjetas de vídeo para garantizar un rendimiento satisfactorio antes de facilitárselas a los usuarios.

El proceso de creación de formularios no rectangulares tiene dos elementos: creación de un formulario con forma y codificación de lógica de programación para poder mover y cerrar el formulario. El segundo paso es necesario porque un formulario con una forma personalizada no tiene barra de título ni la funcionalidad inherente a ella, como la capacidad de mover el formulario en la pantalla y cerrarlo. Por tanto, es necesario escribir código para replicar estas características. Para obtener más información sobre cómo crear los formularios y controlar formas no rectangulares, vea Cómo: Crear Windows Forms con forma.

La creación de un formulario no rectangular consta de tres pasos:

  • Cree un mapa de bits que actuará como superficie del formulario. En realidad, "recortará" la forma deseada del formulario a partir de un rectángulo.

  • Cree un proyecto de aplicación para Windows y defina sus propiedades para eliminar la barra de título y utilizar el mapa de bits como fondo para el formulario.

  • Escriba el código que crea de nuevo la funcionalidad de la barra de título, como mover el formulario y cerrarlo.

Nota Nota

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, elija Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea Personalizar la configuración de desarrollo en Visual Studio.

Para crear un formulario con forma

  1. Cree un mapa de bits de una forma no rectangular de un color con un fondo en otro color. Utilice cualquier programa de dibujo. La forma que dibuje será finalmente el formulario, así que asegúrese de dibujarla con un tamaño que resulte útil.

    Nota Nota

    Elija un color de fondo fácil de recordar, como azul, porque esto será importante más adelante.

  2. En Visual Studio, cree un proyecto nuevo de aplicación para Windows. Para obtener más información, vea Cómo: Crear un nuevo proyecto de aplicación de Windows Forms.

  3. En la ventana Propiedades:

    • Defina la propiedad FormBorderStyle como None.

      Esta propiedad quita la barra de título del formulario. También quita la funcionalidad que proporciona una barra de título, como la capacidad para mover o cerrar el formulario. Sin embargo, este problema se soluciona en el código más adelante.

    • Defina la propiedad BackgroundImage del formulario como el archivo de bits que creó antes. No es necesario agregar el archivo al sistema del proyecto; esto se hará automáticamente cuando lo especifique como imagen de fondo.

      Esta propiedad define la imagen de mapa de bits como el fondo del formulario. Cuando se utiliza en un tándem con la propiedad TransparencyKey especificada a continuación, esta propiedad define la forma del formulario.

    • Defina la propiedad TransparencyKey como el color de fondo del archivo de mapa de bits.

      Esta propiedad indica a la aplicación las partes del formulario que desea ver.

      Nota Nota

      Los monitores con una profundidad de color superior a 24 bits pueden tener problemas para mostrar determinadas partes del formulario que no sean transparentes, incluso si se configura la propiedad TransparencyKey. Para evitar este problema, asegúrese de que la profundidad de color del monitor está establecida en menos de 24 bits en el panel de control Pantalla. Cuando desarrolle aplicaciones que utilicen esta transparencia, tenga en cuenta que deberá advertir a los usuarios de este problema.

Para escribir código para cerrar el formulario

  1. Agregue un control Button al formulario. Para obtener más información, vea Cómo: Agregar controles a formularios Windows Forms.

  2. Agregue código que permitirá al usuario cerrar el formulario invocando a su método Close.

    El siguiente ejemplo muestra cómo puede agregar un botón que, al hacer clic en él, cierre el formulario.

    private void button1_Click(object sender, System.EventArgs e)
    {
       this.Close();
    }
    
    Nota para C#Nota para C#

    Asegúrese de agregar código para habilitar el controlador de eventos. Si utiliza el código del siguiente ejemplo, tendrá el siguiente aspecto:

    this.Button1.Click += new System.EventHandler(this.button1_Click);
    

Para escribir código para mover el formulario (opcional)

  1. Cree un procedimiento para mover el formulario cuando sea arrastrado. Escriba código similar al siguiente para crear un objeto Point nuevo. Esto actuará como variable cuando calcule cómo mover el formulario. El campo isMouseDown se utiliza para controlar si el usuario mantiene presionado el botón del mouse. El formulario debe moverse sólo cuando esté presionado el botón del mouse.

    private Point mouseOffset;
    private bool isMouseDown = false;
    
  2. Cree un controlador de eventos para el evento MouseDown del formulario. En el controlador, agregue código que permita al usuario hacer clic en cualquier parte del formulario para arrastrarlo. Para obtener información detallada acerca de cómo crear controladores de eventos, vea Cómo: Crear controladores de eventos con el diseñador.

    Escriba código similar al siguiente para asignar coordenadas a la variable mouseOffset en función de la posición actual del puntero del mouse. En el siguiente código, observe que la posición de desplazamiento se calcula utilizando información del sistema sobre el tamaño del borde (FrameBorderSize.Width) y el alto de la barra de título (CaptionHeight). Estas medidas se deben tener en cuenta cuando se pruebe el desplazamiento, puesto que algunas medidas se realizan con el área cliente y otras con las coordenadas de la pantalla. Por tanto, el desplazamiento es igual al ancho del borde más el alto de la leyenda más el desplazamiento en el área cliente del formulario.

    private void Form1_MouseDown(object sender, 
        System.Windows.Forms.MouseEventArgs e)
    {
        int xOffset;
        int yOffset;
    
        if (e.Button == MouseButtons.Left) 
        {
            xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
            yOffset = -e.Y - SystemInformation.CaptionHeight - 
                SystemInformation.FrameBorderSize.Height;
            mouseOffset = new Point(xOffset, yOffset);
            isMouseDown = true;
        }    
    }
    
    Nota para C#Nota para C#

    Asegúrese de agregar código para habilitar el controlador de eventos. Si utiliza el código del siguiente ejemplo, tendrá el siguiente aspecto:

    this.MouseDown += new
       System.Windows.Forms.MouseEventHandler
       (this.Form1_MouseDown);
    
  3. Cree un controlador de eventos para el evento MouseMove del formulario.

    Escriba código similar al siguiente. Cuando se hace clic con el botón primario del mouse y se arrastra el mouse, la propiedad Location del formulario se establece en la nueva posición.

    private void Form1_MouseMove(object sender, 
        System.Windows.Forms.MouseEventArgs e)
    {
        if (isMouseDown) 
        {
            Point mousePos = Control.MousePosition;
            mousePos.Offset(mouseOffset.X, mouseOffset.Y);
            Location = mousePos;
        }
    }
    
    Nota para C#Nota para C#

    Asegúrese de agregar código para habilitar el controlador de eventos. Si utiliza el código del siguiente ejemplo, tendrá el siguiente aspecto:

    this.MouseMove += new
       System.Windows.Forms.MouseEventHandler
       (this.Form1_MouseMove);
    
  4. Cree un controlador de eventos para el evento MouseUp del formulario. Escriba código similar al siguiente.

    private void Form1_MouseUp(object sender, 
        System.Windows.Forms.MouseEventArgs e)
    {
        // Changes the isMouseDown field so that the form does
        // not move unless the user is pressing the left mouse button.
        if (e.Button == MouseButtons.Left) 
        {
            isMouseDown = false;
        }
    }
    
    Nota para C#Nota para C#

    Asegúrese de agregar código para habilitar el controlador de eventos. Si utiliza el código del siguiente ejemplo, tendrá el siguiente aspecto:

    this.MouseUp += new
       System.Windows.Forms.MouseEventHandler
       (this.Form1_MouseUp);
    
Mostrar: