CA1301: Vyhněte se duplicitním akcelerátorům
TypeName |
AvoidDuplicateAccelerators |
CheckId |
CA1301 |
Kategorie |
Microsoft.Globalization |
Narušující změna |
Nenarušující |
Příčina
Typ rozšiřuje třídu Control a obsahuje dva nebo více ovládacích prvků nejvyšší úrovně, které mají stejné přístupové klávesy uložené v souboru prostředků.
Popis pravidla
Přístupová klávesa, neboli akcelerátor, umožňuje klávesnici přístup k ovládacímu prvku pomocí klávesy ALT.Když má vícero ovládacích prvků duplicitní přístupové klávesy, není chování přístupové klávesy dobře definováno.Uživatel nebude moci pomocí přístupové klávesy k zamýšlenému ovládacímu prvku přistoupit a může být vybrán jiný ovládací prvek.
Aktuální implementace tohoto pravidla ignoruje položky nabídky.Nicméně položky nabídky by ve stejné podnabídce neměly mít totožné přístupové klávesy.
Jak vyřešit porušení
Porušení tohoto pravidla lze vyřešit definováním jednoznačné klávesy pro všechny ovládací prvky.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
Následující příklad ukazuje minimální formulář, který obsahuje dva ovládací prvky, které mají stejnou přístupovou klávesu.Klávesy jsou uloženy v souboru prostředků, který není ukázán. Nicméně jsou jejich hodnoty zapsány v zakomentovaných řádcích vlastnosti checkBox.Text.Chování duplicitních akcelerátorů lze prozkoumat výměnou řádků vlastnosti checkBox.Text za jejich zakomentované protějšky.Nicméně v tomto případě nebude příklad generovat upozornění na pravidlo.
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);
}
}
}