CA1301: Evitar aceleradores duplicadosCA1301: Avoid duplicate accelerators

TypeNameTypeName AvoidDuplicateAcceleratorsAvoidDuplicateAccelerators
Identificador de comprobaciónCheckId CA1301CA1301
CategoríaCategory Microsoft.GlobalizationMicrosoft.Globalization
Cambio problemáticoBreaking Change Poco problemáticoNon-breaking

MotivoCause

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.A type extends System.Windows.Forms.Control and contains two or more top level controls that have identical access keys that are stored in a resource file.

Descripción de la reglaRule Description

Una tecla de acceso, también denominada acelerador, permite el acceso mediante teclado a un control utilizando la tecla ALT.An access key, also known as an accelerator, enables keyboard access to a control by using the ALT key. Cuando varios controles tienen las teclas de acceso duplicadas, no se define correctamente el comportamiento de la tecla de acceso.When multiple controls have duplicate access keys, the behavior of the access key is not well defined. El usuario no podría tener acceso al control deseado mediante el uso de la clave de acceso y puede que esté habilitado un control diferente del que está diseñado.The user might not be able to access the intended control by using the access key and a control other than the one that is intended might be enabled.

La implementación actual de esta regla omite los elementos de menú.The current implementation of this rule ignores menu items. Sin embargo, los elementos de menú en el mismo submenú no deberían tener teclas de acceso idénticas.However, menu items in the same submenu should not have identical access keys.

Cómo corregir infraccionesHow to Fix Violations

Para corregir una infracción de esta regla, definir teclas de acceso únicas para todos los controles.To fix a violation of this rule, define unique access keys for all controls.

Cuándo suprimir advertenciasWhen to Suppress Warnings

No suprima las advertencias de esta regla.Do not suppress a warning from this rule.

EjemploExample

En el ejemplo siguiente se muestra un formulario mínimo que contiene dos controles que tienen teclas de acceso idénticas.The following example shows a minimal form that contains two controls that have identical access keys. Las claves se almacenan en un archivo de recursos, que no se muestra; Sin embargo, sus valores se mostrarán en el marcado como comentario fuera checkBox.Text líneas.The keys are stored in a resource file, which is not shown; however, their values appear in the commented out checkBox.Text lines. El comportamiento de aceleradores duplicados puede examinarse intercambiando las checkBox.Text líneas con sus homólogos comentados.The behavior of duplicate accelerators can be examined by exchanging the checkBox.Text lines with their commented out counterparts. Sin embargo, en este caso, el ejemplo no generará una advertencia de la regla.However, in this case, the example will not generate a warning from the rule.

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énSee Also

System.Resources.ResourceManagerSystem.Resources.ResourceManager
Recursos de aplicaciones de escritorioResources in Desktop Apps