CA1301: アクセラレータが重複しないようにします
TypeName |
AvoidDuplicateAccelerators |
CheckId |
CA1301 |
[カテゴリ] |
Microsoft.Globalization |
互換性に影響する変更点 |
なし |
原因
型で System.Windows.Forms.Control が拡張され、型に含まれる複数のトップ レベルのコントロールが、1 つのリソース ファイルに格納されている同じアクセス キーを使用しています。
規則の説明
Alt キーを使用するアクセス キー (アクセラレータとも呼ばれます) によって、キーボードからコントロールにアクセスできます。アクセス キーの重複したコントロールがあると、アクセス キーの動作は不明確になります。たとえば、アクセス キーを使用して目的のコントロールにアクセスできないことや、別のコントロールが有効になることがあります。
この規則の現在の実装で、メニュー項目は無視されます。ただし、同じサブメニューのメニュー項目では、アクセス キーが重複しないようにします。
違反の修正方法
この規則違反を修正するには、すべてのコントロールに固有のアクセス キーを定義します。
警告を抑制する状況
この規則による警告は抑制しないでください。
使用例
アクセス キーが重複する 2 つのコントロールを含む最小限のフォームを次の例に示します。アクセス キーはリソース ファイルに格納されます。リソース ファイルは紹介しませんが、キーの値はコメント アウトした 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