更新:2007 年 11 月
| TypeName | 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);
      }
   }
}