CA1301: Evite aceleradores duplicados
TypeName |
AvoidDuplicateAccelerators |
CheckId |
CA1301 |
<strong>Categoria</strong> |
Microsoft.Globalization |
Alteração significativa |
Não-separável |
Causa
Estende a um tipo de System.Windows.Forms.Control e contém dois ou mais controles de nível superior que têm teclas de acesso idênticas que são armazenadas em um arquivo de recurso.
Descrição da regra
Uma tecla de acesso, também conhecido como um acelerador permite o acesso do teclado para um controle usando a tecla ALT. Quando vários controles têm teclas de acesso duplicados, o comportamento da tecla de acesso não é bem definido. O usuário não poderá acessar o controle desejado, usando a chave de acesso e um controle diferente daquele que destina-se que talvez esteja ativado.
A implementação atual desta regra ignora os itens de menu. No entanto, os itens de menu no submenu mesmo não devem ter as chaves de acesso idênticas.
Como corrigir violações
Para corrigir uma violação desta regra, defina teclas de acesso exclusivo para todos os controles.
Quando suprimir avisos
Não suprimir um aviso da regra.
Exemplo
O exemplo a seguir mostra um formulário mínimo que contém dois controles que têm teclas de acesso idênticas. As chaves são armazenadas em um arquivo de recurso, que não é exibido; No entanto, seus valores aparecem no comentadas out checkBox.Text linhas. O comportamento de aceleradores duplicados pode ser examinado pelo intercâmbio de checkBox.Text linhas com suas contrapartes comentada. No entanto, nesse caso, o exemplo não irá 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);
}
}
}
Consulte também
Referência
System.Resources.ResourceManager