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é