次の方法で共有


CA1301: アクセラレータが重複しないようにします

Item [値]
規則 ID CA1301
カテゴリ Microsoft.Globalization
互換性に影響する変更点 なし

原因

型は System.Windows.Forms.Control を拡張しており、リソース ファイルに格納されているのと同じアクセス キーを持つ、2 つ以上のトップ レベル コントロールが含まれています。

規則の説明

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

関連項目