2009-07-03 4 views
0

Ceci est une question WinForms.ListBox Objet ciblé

Dans un ListBox avec SelectionMode = MultiSimple, comment puis-je obtenir l'élément actuellement ciblé? Remarque: Je ne souhaite pas obtenir les éléments SelectedItem ou SelectedItems, mais l'élément qui comporte actuellement les lignes pointillées, quelque chose comme ListView.FocusedItem.

Répondre

1

C'est un peu hacky, mais je n'ai pas trouvé une meilleure solution.

  1. Put ListBox.DrawMode sur OwnerDrawFixed
  2. capturer l'événement DrawItem et enregistrer l'index de mise au point sur un champ

    if (e.State == DrawItemState.Focus) { 
         myfocus = e.Index; 
        } 
        // Draw the background of the ListBox control for each item. 
        e.DrawBackground(); 
        // Define the default color of the brush as black. 
        if (brochas.Count != colores.Count) { 
         ProcesarBrochas(); 
        } 
    
        // Draw the current item text based on the current Font 
        // and the custom brush settings. 
        if (Items.Count > e.Index) { 
         e.Graphics.DrawString(Items[e.Index].ToString(), 
          e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault); 
        } 
        // If the ListBox has focus, draw a focus rectangle around the selected item. 
        e.DrawFocusRectangle(); 
    
  3. Utilisez la variable myFocus

+0

+1 Bonne solution de contournement –

0

Je ne pense pas qu'il y en ait une par défaut - un contrôle utilisateur peut être votre seule option ici.

Vous voudrez peut-être repenser ce que vous faites - pourquoi avez-vous besoin des focalisés au lieu des sélectionnés? Il peut y avoir une façon différente de le faire.

+0

Ce que je veux pour mettre l'accent sur d'autres contrôles lorsque l'utilisateur est "focalisé" sur le premier élément et impulsions la touche "Flèche vers le haut" –

0

Ce n'est pas la solution parfaite, mais une solution de contournement peut être de stocker le selectedItem dans un "focusedItem" lorsque l'événement de flou se déclenche, puis de le récupérer simplement lorsque vous en avez besoin.

+0

Je n'ai pas fin d un flou sur le contrôle ListBox, où est-ce? –