Freigeben über


CA1301: Doppelte Zugriffstasten vermeiden.

Element Wert
RuleId CA1301
Category Microsoft.Globalization
Unterbrechende Änderung Nicht unterbrechend

Ursache

Ein Typ erweitert System.Windows.Forms.Control und enthält mindestens zwei Steuerelemente der obersten Ebene mit identischen Tastenkombinationen, die in einer Ressourcendatei gespeichert sind.

Regelbeschreibung

Eine Tastenkombination (auch bezeichnet als Zugriffstaste) ermöglicht den Zugriff auf ein Steuerelement unter Verwendung der ALT-TASTE. Wenn mehrere Steuerelemente über die gleiche Tastenkombination verfügen, ist das Verhalten der Tastenkombination nicht klar definiert. Es kann vorkommen, dass Benutzer*innen mithilfe der Tastenkombination nicht auf das beabsichtigte Steuerelement zugreifen können und stattdessen ein anderes Steuerelement aktiviert wird.

Die aktuelle Implementierung dieser Regel ignoriert Menüelemente. Menüelemente im gleichen Untermenü sollten jedoch keine identischen Tastenkombinationen haben.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, definieren Sie eindeutige Tastenkombinationen für alle Steuerelemente.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Das folgende Beispiel zeigt ein Formular mit minimaler Funktionalität, das zwei Steuerelemente mit identischen Tastenkombinationen enthält. Die Tastenkombinationen werden in einer Ressourcendatei gespeichert, die hier nicht dargestellt ist. Ihre Werte sind jedoch in den auskommentierten checkBox.Text-Zeilen angegeben. Sie können das Verhalten von doppelten Tastenkombinationen untersuchen, indem Sie die checkBox.Text-Zeilen und ihre auskommentierten Gegenstücken austauschen. In diesem Fall generiert das Beispiel jedoch keine Warnung der Regel.

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

Siehe auch