Udostępnij za pośrednictwem


CA1301: Należy unikać duplikowania akceleratorów

TypeName

AvoidDuplicateAccelerators

CheckId

CA1301

Kategoria

Microsoft.Globalization

Zmiana kluczowa

Niekluczowa

Przyczyna

Typ rozszerza Control i zawiera dwie lub więcej kontrolek najwyższego poziomu, które mają identyczne klawisze dostępu, które są przechowywane w pliku zasobów.

Opis reguły

Klucz dostępu, znany również jako akcelerator, umożliwia dostęp z klawiatury do kontrolki przy użyciu klawisza ALT.Kiedy wiele kontrolek ma zduplikowany klucz dostępu, zachowanie klucza dostępu nie jest dobrze zdefiniowane.Użytkownik może nie być w stanie dotrzeć do zamierzonej kontrolki przy użyciu klucza dostępu, inna kontrolka, niż ta która jest zamierzona, może zostać włączona.

Aktualna implementacja tej reguły ignoruje elementy menu.Jednak elementy menu w tym samym podmenu nie powinny mieć identycznego klucza dostępu.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy zdefiniować unikatowe klawisze dostępu dla wszystkich kontrolek.

Kiedy pominąć ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.

Przykład

Poniższy przykład pokazuje minimalny formularz, który zawiera dwie kontrolki, które mają identyczne klawisze dostępu.Klucze są przechowywane w pliku zasobów, który nie jest wyświetlany; Jednakże ich wartości pojawiają się w zakomentowanych liniach checkBox.Text.Zachowanie zduplikowanych akceleratorów może być zbadane przez zamianę linii checkBox.Text z ich zakomentowanymi odpowiednikami.Jednakże w tym przypadku przykład nie wygeneruje ostrzeżenia tej reguły.

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

Zobacz też

Informacje

ResourceManager

Koncepcje

Zasoby w aplikacjach klasycznych