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