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

Conceitos

Recursos em aplicativos