CA1301: Evitare tasti di scelta rapida duplicati
TypeName |
AvoidDuplicateAccelerators |
CheckId |
CA1301 |
Category |
Microsoft.Globalization |
Breaking Change |
Non sostanziale |
Causa
Un tipo estende Control e contiene due o più controlli di primo livello con tasti di scelta identici archiviati in un file di risorse.
Descrizione della regola
Un tasto di scelta o tasto di scelta rapida consente l'accesso da tastiera a un controllo mediante ALT.Quando più controlli presentano tasti di scelta duplicati, il comportamento del tasto di scelta non è ben definito.È possibile che l'utente non sia in grado di accedere al controllo desiderato utilizzando il tasto di scelta e che attivi un controllo diverso.
L'implementazione attuale di questa regola ignora le voci di menu.Le voci di menu presenti nello stesso sottomenu non devono, tuttavia, presentare tasti di scelta identici.
Come correggere le violazioni
Per correggere una violazione di questa regola, definire tasti di scelta univoci per tutti i controlli.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito viene illustrato un form minimo contenente due controlli con tasti di scelta identici.I tasti sono archiviati in un file di risorse che non è indicato; i relativi valori, tuttavia, sono contenuti nelle righe impostate come commento di checkBox.Text.Il comportamento dei tasti di scelta rapida duplicati può essere esaminato scambiando le righe di checkBox.Text con le parti corrispondenti impostate come commenti.In questo caso, non verrà generato un avviso dalla regola.
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);
}
}
}