CA1301:避免快捷键重复

类型名

AvoidDuplicateAccelerators

CheckId

CA1301

类别

Microsoft.Globalization

是否重大更改

非重大更改

原因

某类型扩展了 System.Windows.Forms.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);
      }
   }
}

请参见

参考

System.Resources.ResourceManager

概念

桌面应用程序中的资源