CA1301: evitar aceleradores duplicados
TypeName |
AvoidDuplicateAccelerators |
CheckId |
CA1301 |
Categoria |
Microsoft.Globalization |
Alteração Significativa |
Sem quebra |
Causa
Um tipo estende Control e contém os controles dois ou mais de nível superior que têm as chaves idênticas de acesso que são armazenadas em um arquivo de recursos.
Descrição da Regra
Uma tecla de acesso, também conhecida como, um acelerador de teclado permite o acesso a um controle usando a tecla ALT.Quando vários controles de acesso tenham chaves duplicadas, o comportamento da tecla de acesso não é bem definido.O usuário não poderá acessar o controle planejado usando a tecla de acesso e um controle diferente de aquele que é destinado pode ser habilitado.
A implementação atual dessa regra ignora itens de menu.Entretanto, os itens de menu no mesmo submenu não devem ter chaves de acesso idênticas.
Como Corrigir Violações
Para corrigir uma violação desta regra, defina teclas de acesso exclusivos para todos os controles.
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Exemplo
O exemplo a seguir mostra uma forma mínimo que contém dois controles de acesso que têm chaves idênticas.As chaves são armazenadas em um arquivo de recursos, que não é mostrado; porém, seus valores aparecem nas linhas fora comentadas de checkBox.Text .O comportamento de aceleradores duplicados pode ser verificado trocando as linhas de checkBox.Text com suas contrapartes para fora comentadas.Porém, neste caso, o exemplo não gerará um aviso da regra.
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);
}
}
}