CA1301: Evitar aceleradores duplicados
Item | Valor |
---|---|
RuleId | CA1301 |
Categoria | Microsoft.Globalization |
Alteração da falha | Sem interrupção |
Causa
Um tipo estende o System.Windows.Forms.Control e contém dois ou mais controles de nível superior que têm chaves de acesso idênticas armazenadas em um arquivo de recurso.
Descrição da regra
Uma chave de acesso, também conhecida como acelerador, dá ao teclado acesso a um controle usando a tecla Alt. Quando vários controles têm a mesma chave de acesso, o comportamento da chave de acesso não é bem definido. O usuário pode não conseguir acessar o controle pretendido usando a chave de acesso e um controle diferente daquele que se pretende pode ser habilitado.
A implementação atual dessa regra ignora itens de menu. No entanto, 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 dessa regra, defina chaves de acesso exclusivas para todos os controles.
Quando suprimir avisos
Não suprima um aviso nessa regra.
Exemplo
O exemplo a seguir mostra um formulário mínimo que contém dois controles que têm chaves de acesso idênticas. As chaves são armazenadas em um arquivo de recurso, que não é mostrado. No entanto, seus valores aparecem nas linhas comentadas checkBox.Text
. O comportamento de aceleradores duplicados pode ser examinado trocando as linhas checkBox.Text
por suas contrapartes comentadas. No entanto, nesse 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);
}
}
}
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de