Compartir a través de


CA1301: Evitar aceleradores duplicados

Nombre de tipo

AvoidDuplicateAccelerators

Identificador de comprobación

CA1301

Categoría

Microsoft.Globalization

Cambio problemático

Poco problemático

Causa

Un tipo extiende System.Windows.Forms.Control y contiene dos o más controles de nivel superior que tienen teclas de acceso idénticas que se almacenan en un archivo de recursos.

Descripción de la regla

Una tecla de acceso, también denominada acelerador, permite el acceso mediante teclado a un control utilizando la tecla ALT. Cuando varios controles tienen teclas de acceso duplicadas, no se define correctamente el comportamiento de la tecla de acceso. Puede ocurrir que el usuario no tenga acceso al control deseado utilizando la tecla de acceso y que se habilite un control distinto al que desea.

La implementación actual de esta regla omite los elementos de menú. Sin embargo, los elementos de menú en el mismo submenú no deberían tener teclas de acceso idénticas.

Cómo corregir infracciones

Para corregir una infracción de esta regla, defina teclas de acceso únicas para todos los controles.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

El ejemplo siguiente muestra un formulario mínimo que contiene dos controles con teclas de acceso idénticas. Las teclas se almacenan en un archivo de recursos, que no se muestra; sin embargo, sus valores aparecen en las líneas con comentario checkBox.Text. El comportamiento de aceleradores duplicados puede examinarse intercambiando las líneas checkBox.Text con sus homólogas con comentarios. Sin embargo, en este caso, el ejemplo no generará una advertencia de la regla.

using System;
using System.Drawing;
using System.Resources;
using System.Windows.Forms;

namespace GlobalizationLibrary
{
   public class DuplicateAccelerators : Form
   {
      [STAThread]
      public static void Main()
      {
         DuplicateAccelerators accelerators = new DuplicateAccelerators();
         Application.Run(accelerators);
      }

      private CheckBox checkBox1;
      private CheckBox checkBox2;

      public DuplicateAccelerators()
      {
         ResourceManager resources = 
            new ResourceManager(typeof(DuplicateAccelerators));

         checkBox1 = new CheckBox();
         checkBox1.Location = new Point(8, 16);
         // checkBox1.Text = "&checkBox1";
         checkBox1.Text = resources.GetString("checkBox1.Text");

         checkBox2 = new CheckBox();
         checkBox2.Location = new Point(8, 56);
         // checkBox2.Text = "&checkBox2";
         checkBox2.Text = resources.GetString("checkBox2.Text");

         Controls.Add(checkBox1);
         Controls.Add(checkBox2);
      }
   }
}

Vea también

Referencia

System.Resources.ResourceManager

Conceptos

Recursos en aplicaciones