É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