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

항목
RuleId 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);
      }
   }
}

참고 항목