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