Partager via


Éviter les accélérateurs en double

Mise à jour : novembre 2007

TypeName

AvoidDuplicateAccelerators

CheckId

CA1301

Catégorie

Microsoft.Globalization

Modification avec rupture

Modification sans rupture

Cause

Un type étend System.Windows.Forms.Control et contient plusieurs contrôles de niveau supérieure dotés des mêmes touches d'accès rapide, stockées dans un fichier de ressources.

Description de la règle

Une touche d'accès rapide, également connue sous le nom d'accélérateur, autorise l'accès à un contrôle par le biais du clavier, à l'aide de la touche ALT. Lorsque plusieurs contrôles présentent des touches d'accès rapide en doublon, le comportement de ces dernières n'est pas correctement défini. L'utilisateur peut ne pas être en mesure d'accéder au contrôle prévu à l'aide de la touche d'accès rapide correspondante et un contrôle autre que celui prévu peut être activé.

L'implémentation actuelle de cette règle ignore les éléments de menu. Toutefois, les éléments d'un même sous-menu ne doivent pas disposer de touches d'accès rapide identiques.

Comment corriger les violations

Pour corriger une violation de cette règle, définissez une touche d'accès rapide unique pour chacun des contrôles.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

L'exemple suivant présente un formulaire minimal qui contient deux contrôles dotés de touches d'accès rapide identiques. Les touches sont stockées dans un fichier de ressources qui n'est pas présenté ; toutefois, leurs valeurs s'affichent dans les lignes checkBox.Text mises en commentaires. Le comportement d'accélérateurs en doublon peut être examiné en échangeant les lignes checkBox.Text avec leurs équivalents commentés. Toutefois, dans ce cas, l'exemple ne génère aucun avertissement issu de la règle.

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 aussi

Concepts

Ressources dans les applications

Référence

System.Resources.ResourceManager