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

概念

アプリケーションのリソース