CA1301: Doppelte Zugriffstasten vermeiden
TypeName |
AvoidDuplicateAccelerators |
CheckId |
CA1301 |
Kategorie |
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 Zugriffstasten, die in einer Ressourcendatei gespeichert sind.
Regelbeschreibung
Eine Zugriffstaste ermöglicht den Zugriff auf ein Steuerelement unter Verwendung der ALT-TASTE. Wenn mehrere Steuerelemente über doppelte Zugriffstasten verfügen, ist das Verhalten der Zugriffstaste nicht stringent. Der Benutzer kann unter Umständen mithilfe der Zugriffstaste nicht auf das gewünschte Steuerelement zugreifen, und möglicherweise wird nicht das gewünschte Steuerelement aktiviert.
Bei der aktuellen Implementierung dieser Regel werden Menüelemente ignoriert. Menüelemente im gleichen Untermenü sollten jedoch nicht die gleichen Zugriffstasten haben.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, definieren Sie eindeutige Zugriffstasten für alle Steuerelemente.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
Im folgenden Beispiel wird ein minimales Formular dargestellt, das zwei Steuerelemente mit gleichen Zugriffstasten enthält. Die Tasten sind in einer Ressourcendatei gespeichert, die nicht dargestellt ist. Die Werte dieser Tasten sind jedoch in den auskommentierten checkBox.Text-Zeilen enthalten. Das Verhalten doppelter Zugriffstasten kann überprüft werden, indem die checkBox.Text-Zeilen durch ihre auskommentierten Gegenstücke ausgetauscht werden. In diesem Fall wird im Beispiel jedoch keine Warnung aus der Regel generiert.
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
Referenz
System.Resources.ResourceManager