CA1301: Vyhněte se duplicitním akcelerátorům
Zboží | Hodnota |
---|---|
RuleId | CA1301 |
Kategorie | Microsoft.Globalization |
Změna způsobující chybu | Nenarušující |
Příčina
Typ se rozšiřuje System.Windows.Forms.Control a obsahuje dva nebo více ovládacích prvků nejvyšší úrovně, které mají identické přístupové klíče uložené v souboru prostředků.
Popis pravidla
Přístupová klávesa, označovaná také jako akcelerátor, umožňuje klávesovým zkratkám přístup k ovládacímu prvku pomocí klávesy Alt . Pokud má více ovládacích prvků stejný přístupový klíč, chování přístupového klíče není dobře definované. Uživatel nemusí mít přístup k zamýšlenému ovládacímu prvku pomocí přístupového klíče a může být povolený jiný ovládací prvek než ten, který je zamýšlený.
Aktuální implementace tohoto pravidla ignoruje položky nabídky. Položky nabídky ve stejné podnabídce by ale neměly mít stejné přístupové klíče.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, definujte jedinečné přístupové klíče 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í identické přístupové klíče. Klíče se ukládají do souboru prostředků, který se nezobrazuje. Jejich hodnoty se ale zobrazí v zakomentovaných checkBox.Text
řádcích. Chování duplicitních akcelerátorů je možné prozkoumat výměnou checkBox.Text
řádků s jejich zakomentovanými protějšky. V tomto případě však příklad negeneruje upozornění z pravidla.
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);
}
}
}
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro