CA1301:避免快捷键重复
类型名 |
AvoidDuplicateAccelerators |
CheckId |
CA1301 |
类别 |
Microsoft.Globalization |
是否重大更改 |
非重大更改 |
原因
某类型扩展了 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);
}
}
}