Поделиться через


CA1301: не следует допускать повторяющихся сочетаний клавиш быстрого доступа

TypeName

AvoidDuplicateAccelerators

CheckId

CA1301

Категория

Microsoft.Globalization

Критическое изменение

Не критическое

Причина

Тип расширяет 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);
      }
   }
}

См. также

Ссылки

ResourceManager

Основные понятия

Ресурсы в приложениях для настольных систем