Sdílet prostřednictvím


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);
      }
   }
}

Viz také

Referenční dokumentace

ResourceManager

Koncepty

Prostředky v aplikacích klasické pracovní plochy