다음을 통해 공유


CA1301: 중복 액셀러레이터 키를 사용하지 마십시오.

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

참고 항목

참조

System.Resources.ResourceManager

개념

응용 프로그램의 리소스