Не допускать повторяющихся сочетаний клавиш быстрого доступа
Обновлен: Ноябрь 2007
TypeName |
AvoidDuplicateAccelerators |
CheckId |
CA1301 |
Категория |
Microsoft.Globalization |
Критическое изменение |
Не критическое |
Причина
Тип расширяет System.Windows.Forms.Control и содержит два или более элементов управления верхнего уровня с одинаковыми клавишами доступа, которые хранятся в файле ресурсов.
Описание правила
Клавиша доступа, также называемая клавишей быстрого доступа, обеспечивает клавиатурный доступ к элементу управления с помощью клавиши ALT. Когда несколько элементов управления имеют одинаковые клавиши доступа, поведение при их использовании определено нечетко. Пользователь не сможет получить доступ к желаемому элементу управления с использованием клавиши доступа и, возможно, активирует другой элемент управления.
Текущая реализация данного правила не действует на пункты меню. Однако пункты меню в одном подменю должны иметь различные клавиши доступа.
Устранение нарушений
Чтобы устранить нарушение данного правила, определите уникальные клавиши доступа для всех элементов управления.
Отключение предупреждений
Для этого правила отключать вывод предупреждений не следует.
Пример
В следующем примере показана простейшая форма с двумя элементами управления с одинаковыми клавишами доступа. Сочетания клавиш хранятся в файле ресурсов, который не показан, однако их значения содержаться в закомментированных строках checkBox.Text. Поведение совпадающих клавиш быстрого доступа может быть изучено путем замены строк checkBox.Text на их аналоги из комментариев. Однако в этом случае в примере не создается предупреждение для правила.
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);
}
}
}