2009-05-28 8 views
0

J'ai un contrôle utilisateur qui contient un FlowLayoutPanel (flux de descente) avec un tas de radiobuttons. Le contrôle expose un événement CheckedChanged qui se déclenche chaque fois que l'un des contrôles de radiobutton a changé.Les touches fléchées et le changement de focus du contrôle accrochent l'application

Mon formulaire contient la commande usercontrol et une zone de texte. Je souscris l'événement CheckedChanged d'usercontrol et selon le bouton radio vérifié, je désactive la zone de texte ou mets un focus dans la zone de texte. Tout cela fonctionne très bien avec un clic de souris lorsque vous changez l'état de vérification du radiobutton. Cependant, cela sera suspendu indéfiniment lorsque vous utilisez les touches fléchées. Je ne comprends pas pourquoi la différence.

Voici les étapes pour reproduire le comportement que je vois:

  1. Créer une usercontrol et déposez un contrôle FlowLayoutPanel et définir ses FlowDirection = TopDown. Puis ajoutez deux radiobuttons au FlowLayoutPanel.

  2. Fournir un gestionnaire d'événements dans le usercontrol

    public event EventHandler CheckedChanged 
    { 
        add { radioButton2.CheckedChanged += value; } 
        remove { radioButton2.CheckedChanged -= value; } 
    } 
    
  3. Créer une forme de fenêtres et déposez le contrôle de l'utilisateur ci-dessus. Ajoutez une zone de texte et définissez Enabled sur False. Abonnez-vous à l'événement CheckedChanged du usercontrol comme suit

    private void userControl11_CheckedChanged(object sender, EventArgs e) 
    { 
        textBox1.Select(); 
    } 
    
  4. Run. Notez que si vous utilisez la souris pour cliquer entre les radiobuttons, la chose fonctionne bien; mais il va planter si vous utilisez les touches fléchées haut/bas.

+3

Je parie votre question ne contient pas suffisamment d'informations pour résoudre ce problème. Pouvez-vous cuisiner le cas de test le plus simple possible (le moins de lignes de code) qui illustre le problème et l'ajouter ici? – Rytmis

Répondre

0
public event EventHandler CheckedChanged 
{ 
    add { 
     radioButton2.CheckedChanged += value; 
     } 
    remove { 
     radioButton2.CheckedChanged -= value; 
     } 
} 

Hmm, value est non initialisée? Ou est-ce que je manque quelque chose?

Questions connexes