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);
}
}
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示