CA1301:避免使用重複的快速鍵

型別名稱

AvoidDuplicateAccelerators

CheckId

CA1301

分類

Microsoft.Globalization

中斷變更

中斷

原因

型別會擴充 System.Windows.Forms.Control,並包含兩個以上的最上層控制項,但這些控制項在資源檔案中所儲存的便捷鍵 (Access Key) 是相同的。

規則描述

便捷鍵也稱為快速鍵,可讓鍵盤使用 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);
      }
   }
}

請參閱

參考

System.Resources.ResourceManager

概念

應用程式中的資源