2017-07-11 1 views
0

J'ai essayé d'empêcher mon ListView de faire défiler/sélectionner automatiquement l'élément avec la première lettre que j'ai appuyée.Empêcher ListView de faire défiler/sélectionner des éléments en appuyant sur les touches

J'ai donc essayé de l'ignorer, mais cela ne me suffit pas.

public ref class ExtendedListView : public System::Windows::Forms::ListView 
{ 
public: 
    ExtendedListView(); 

    virtual void KeyPress(KeyEventArgs e) override 
    { 
     if (e.KeyCode == Keys::W || e.KeyCode == Keys::A || e.KeyCode == Keys::S || e.KeyCode == Keys::D) 
     { 
      MessageBox::Show("Test"); 
      return; 
     }   
    } 

}; 

(j'ai ajouté le MessageBox pour tester si cela fonctionne)

Répondre

1

les feux de l'événement »KeyPress avant le changement de listview (je fatigué avec liste) L'astuce consiste à définir 2 variables:

int selectedindex=0; 
bool goBack=false; 

private void listBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode==Keys.B) 
    { 
     selectedindex = listBox1.SelectedIndex; 
     goBack = true; 
    } 
} 

private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e) 
{ 
    if (goBack) 
    { 
     listBox1.SelectedIndex = selectedindex; 
     goBack = false; 
    } 
} 

Cet exemple empêche la touche 'B' par exemple. J'espère que c'est ce que vous voulez dire.

+0

Ce n'est pas une bonne idée. Cela corrige ce qui a déjà été fait. Mieux vaut l'empêcher. Donc, utilisez simplement l'événement SelectedIndexChanging. Avec cet événement, vous pouvez empêcher le changement de sélection. – xMRi

+0

Il n'y a pas un tel événement pour listview ou listbox mon ami –

+0

Et quel genre d'événement est-ce: https://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.listview.selectedindexchanging(v = vs.110) .aspx – xMRi

1

Il suffit d'utiliser la SuppressKeyPress du KeyEventArgs

Cela devrait provoquer que le contrôle ne tient pas compte de cette clé.