CA1301 : Éviter les accélérateurs en doubleCA1301: Avoid duplicate accelerators

TypeNameTypeName AvoidDuplicateAcceleratorsAvoidDuplicateAccelerators
CheckIdCheckId CA1301CA1301
CategoryCategory Microsoft.GlobalizationMicrosoft.Globalization
Modification avec ruptureBreaking Change Sans ruptureNon-breaking

CauseCause

Un type étend System.Windows.Forms.Control et contient deux ou plusieurs contrôles de niveau supérieur qui ont des clés d’accès identiques qui sont stockés dans un fichier de ressources.A type extends System.Windows.Forms.Control and contains two or more top-level controls that have identical access keys that are stored in a resource file.

Description de la règleRule description

Une clé d’accès, également appelé un accélérateur, Active l’accès clavier à un contrôle à l’aide de la Alt clé.An access key, also known as an accelerator, enables keyboard access to a control by using the Alt key. Lorsque plusieurs contrôles présentent la même clé d’accès, le comportement de la clé d’accès n’est pas bien défini.When multiple controls have the same access key, the behavior of the access key is not well defined. L’utilisateur ne peut pas être en mesure d’accéder au contrôle prévu à l’aide de la clé d’accès et un contrôle autre que celui qui est prévu peut être activé.The user might not be able to access the intended control by using the access key, and a control other than the one that is intended might be enabled.

L’implémentation actuelle de cette règle ignore les éléments de menu.The current implementation of this rule ignores menu items. Toutefois, les éléments de menu dans le même sous-menu ne doivent pas avoir les clés d’accès identiques.However, menu items in the same submenu should not have identical access keys.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, définissez les clés d’accès unique pour tous les contrôles.To fix a violation of this rule, define unique access keys for all controls.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

ExempleExample

L’exemple suivant présente un formulaire minimal qui contient deux contrôles qui ont des clés d’accès identiques.The following example shows a minimal form that contains two controls that have identical access keys. Les clés sont stockées dans un fichier de ressources, ce qui n’est pas affiché.The keys are stored in a resource file, which is not shown. Toutefois, leurs valeurs s’affichent dans les out checkBox.Text lignes.However, their values appear in the commented out checkBox.Text lines. Le comportement d’accélérateurs en doublon peut être examiné en échangeant les checkBox.Text lignes avec leurs équivalents commentés.The behavior of duplicate accelerators can be examined by exchanging the checkBox.Text lines with their commented out counterparts. Toutefois, dans ce cas, l’exemple ne génère pas un avertissement à partir de la règle.However, in this case, the example will not generate a warning from the rule.

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);
      }
   }
}

Voir aussiSee also