Evitar aceleradores duplicados
TypeName |
AvoidDuplicateAccelerators |
CheckId |
CA1301 |
Category (Categoria) |
Microsoft.globalização |
Quebrando alterar |
Não separável |
Causa
Um tipo estende System.Windows.Forms.Control e contém dois ou mais controles de nível superior com as teclas de acesso idênticas são armazenadas em um arquivo de recurso.
Descrição da regra
Um acesso chave, também conhecido sistema autônomo um acelerador permite acesso de chave placa a um controle usando o ALT chave.Quando vários controles tem acesso duplicadas chave s, o comportamento do acesso chave não está bem definido.O usuário não poderá acessar o controle desejado usando a tecla de acesso e um controle Outros não um desejados podem ser ativado.
A implementação corrente desta regra ignora itens de menu.No entanto, 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 dessa 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 com chaves 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 trocando o checkBox.Text linhas com suas contrapartes comentadas check-out. 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);
}
}
}