Condividi tramite


CA1301: Evitare tasti di scelta rapida duplicati

TypeName

AvoidDuplicateAccelerators

CheckId

CA1301

Category

Microsoft.Globalization

Breaking Change

Non sostanziale

Causa

Un tipo estende System.Windows.Forms.Control e contiene due o più controlli di primo livello con tasti di scelta identici archiviati in un file di risorse.

Descrizione della regola

Un tasto di scelta o tasto di scelta rapida consente l'accesso da tastiera a un controllo mediante ALT.Quando più controlli presentano tasti di scelta duplicati, il comportamento del tasto di scelta non è ben definito.È possibile che l'utente non sia in grado di accedere al controllo desiderato utilizzando il tasto di scelta e che attivi un controllo diverso.

L'implementazione attuale di questa regola ignora le voci di menu.Le voci di menu presenti nello stesso sottomenu non devono, tuttavia, presentare tasti di scelta identici.

Come correggere le violazioni

Per correggere una violazione di questa regola, definire tasti di scelta univoci per tutti i controlli.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito viene illustrato un form minimo contenente due controlli con tasti di scelta identici.I tasti sono archiviati in un file di risorse che non è indicato; i relativi valori, tuttavia, sono contenuti nelle righe impostate come commento di checkBox.Text.Il comportamento dei tasti di scelta rapida duplicati può essere esaminato scambiando le righe di checkBox.Text con le parti corrispondenti impostate come commenti.In questo caso, non verrà generato un avviso dalla regola.

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);
      }
   }
}

Vedere anche

Riferimenti

System.Resources.ResourceManager

Concetti

Risorse nelle applicazioni desktop