Condividi tramite


CA1301: Evitare tasti di scelta rapida duplicati

Articolo Valore
ID regola CA1301
Category Microsoft.Globalization
Modifica Nessuna interruzione

Causa

Un tipo estende System.Windows.Forms.Control e contiene due o più controlli di primo livello con chiavi di accesso identiche archiviate in un file di risorse.

Descrizione regola

Un tasto di scelta, noto anche come acceleratore, consente l'accesso da tastiera a un controllo usando il tasto ALT . Quando più controlli hanno la stessa chiave di accesso, il comportamento della chiave di accesso non è ben definito. L'utente potrebbe non essere in grado di accedere al controllo previsto usando il tasto di scelta e un controllo diverso da quello previsto potrebbe essere abilitato.

L'implementazione corrente di questa regola ignora le voci di menu. Tuttavia, le voci di menu nello stesso sottomenu non devono avere chiavi di accesso identiche.

Come correggere le violazioni

Per correggere una violazione di questa regola, definire chiavi di accesso univoco per tutti i controlli.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio seguente viene illustrato un modulo minimo che contiene due controlli con chiavi di accesso identiche. Le chiavi vengono archiviate in un file di risorse, che non viene visualizzato. Tuttavia, i relativi valori vengono visualizzati nelle righe impostate checkBox.Text come commento. Il comportamento degli acceleratori duplicati può essere esaminato scambiando le checkBox.Text righe con le controparti commentate. In questo caso, tuttavia, l'esempio non genererà 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);
      }
   }
}

Vedi anche