HOWTO · Csharp

Deshabilitar y habilitar botones en C#

En esta guía, veremos cómo podemos deshabilitar y habilitar los botones en C#.

En esta página

Para deshabilitar un botón en una aplicación Windows Forms, asigna Enabled a false; asígnale true para volver a habilitarlo. La propiedad exacta depende del framework de interfaz: WPF usa IsEnabled, mientras que Windows Forms y Web Forms de ASP.NET usan Enabled. (C#)

Qué hace la propiedad de estado del botón

Un botón habilitado puede recibir interacciones del usuario y ejecutar su acción. Al deshabilitarlo, el usuario no puede activarlo desde la interfaz, y los frameworks suelen mostrar ese estado visualmente. Un botón comienza habilitado, salvo que la aplicación, el diseñador o el marcado establezcan otro valor inicial. Deshabilitar un control es un comportamiento de la interfaz; no sustituye la comprobación de permisos ni la validación de datos en la operación que procesa una solicitud.

Crear o seleccionar un botón de Windows Forms

En el diseñador de Windows Forms, agrega un Button desde el Toolbox y asigna myButton a su propiedad (Name). El código del formulario puede acceder al control creado por el diseñador, por lo que los controladores de eventos pueden actualizarlo. También puedes crear un Button en el código y agregarlo al formulario; ButtonBase es un tipo base, no el control concreto que se suele agregar para representar un botón.

Deshabilitar y volver a habilitar un botón de Windows Forms

Coloca el código que cambia el estado dentro de la clase del formulario, donde está disponible myButton. Este ejemplo de Windows Forms supone que el diseñador creó myButton y un resetButton independiente en el mismo formulario. Agrega estos controladores dentro de la clase del formulario y luego conecta myButton.Click con DisableButton_Click y resetButton.Click con EnableButton_Click en el panel Events del diseñador (o usa myButton.Click += DisableButton_Click; y resetButton.Click += EnableButton_Click; después de InitializeComponent()): private void DisableButton_Click(object sender, EventArgs e) { myButton.Enabled = false; } y private void EnableButton_Click(object sender, EventArgs e) { myButton.Enabled = true; }. Al hacer clic en el primer botón, ese mismo botón se deshabilita; el botón de restablecimiento independiente vuelve a habilitarlo. Estos fragmentos de controladores son específicos de Windows Forms y no son programas independientes.

El siguiente ejemplo de consola autónomo ilustra únicamente el cambio de estado. No crea un control de Windows Forms; su salida muestra el estado booleano antes y después de las asignaciones. En un formulario de Windows Forms, usa las asignaciones a Button.Enabled mostradas arriba.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

using System;

class Program
{
    static void Main()
    {
        bool submitButtonEnabled = true;
        submitButtonEnabled = false;
        Console.WriteLine($"Enabled: {submitButtonEnabled}");
        submitButtonEnabled = true;
        Console.WriteLine($"Enabled: {submitButtonEnabled}");
    }
}
Enabled: False
Enabled: True

Usar el estado del botón en controladores de eventos y en la validación del formulario

Un patrón habitual consiste en mantener el botón Submit deshabilitado hasta que los campos obligatorios superen la validación. Cuando cambie un campo, valida los valores actuales y asigna a submitButton.Enabled el resultado de esa validación. En un controlador de validación del formulario, vuelve a asignarle true solo cuando se hayan superado todas las comprobaciones necesarias. Valida también al procesar el envío: el estado de la interfaz ayuda a orientar al usuario, pero no debe ser la única protección de una operación. Si una solicitud tarda mucho, deshabilita Submit mientras se procesa y vuelve a habilitarlo cuando termine, incluso si falla, para que el usuario pueda volver a intentarlo.

Nombres de propiedades según el framework

Usa la propiedad correspondiente al tipo de control: Button.Enabled de Windows Forms, Button.IsEnabled de WPF y Button.Enabled de Web Forms de ASP.NET. En WPF, también se puede enlazar IsEnabled a un valor del modelo de vista, lo que permite que la interfaz refleje el estado de la aplicación. En Web Forms de ASP.NET, la propiedad Enabled del lado del servidor controla el control de servidor renderizado; no es una comprobación de seguridad, y el usuario puede cambiar el estado deshabilitado del lado del cliente. Estos fragmentos describen las API de los frameworks y no son programas independientes.

Errores habituales y comprobaciones del estado del botón

  • Comprueba el framework y el tipo de control antes de elegir Enabled o IsEnabled.
  • Confirma que el controlador esté conectado al evento Click o de validación esperado y que el código haga referencia a la instancia correcta del botón.
  • Si un botón permanece deshabilitado, revisa todas las asignaciones a su propiedad de estado y comprueba que la condición de validación pueda cumplirse.
  • Ofrece otra forma de volver a habilitar un botón deshabilitado por su propio controlador de clic, como al completar una tarea o mediante una acción independiente de Cancelar o Restablecer.
  • Aplica la autorización y valida los valores enviados dentro de la propia operación; la apariencia de un botón deshabilitado no la protege.