Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Composants VCL
Composants VCL Utilisation des différents composants VCL (Visual Component Library)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/01/2013, 12h49   #1
gaby277
Membre du Club
 
Inscription : août 2005
Messages : 85
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 85
Points : 64
Points : 64
Par défaut listview - violation d'acces

Bonjour,
J’ai un problème de violation d’accès avec une listview. J’ai une solution mais j’aimerai comprendre (et apprendre - turbo Delphi – XP SP3).

Je remplis une listeview avec le nom et le label des lecteurs de CD/DVD disponibles.
Quand l’utilisateur sélectionne un lecteur, son nom est recopié dans un tedit avec le code suivant sur OnSelectItem
Code :
1
2
3
4
5
procedure TFormMajcd.ListViewLecteursSelectItem(Sender: TObject;
  Item: TListItem; Selected: Boolean);
begin
   FormMajcd.EditLecteurSelectionne.Text := FormMajcd.ListViewLecteurs.Selected.Caption 
end;
ça marche la première fois, mais si on clique ensuite sur un autre lecteur dans la listeview il y a une violation d’accès.

Par contre si la même ligne de code est dans l’événement onClick ça marche parfaitement. A chaque fois qu’un lecteur est sélectionné dans la listeview il s’affiche dans le tedit.

Code :
Code :
1
2
3
4
procedure TFormMajcd.ListViewLecteursClick(Sender: TObject);
begin
 FormMajcd.EditLecteurSelectionne.Text := FormMajcd.ListViewLecteurs.Selected.Caption ;
end;
Pourriez vous m’expliquer pourquoi.
gaby277 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 13h06   #2
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 970
Points : 9 970
Salut

Lors de la sélection d'un élément de la liste, l'événement OnSelectItem est au plus déclencher 2 fois.
La première fois pour l'élément qui perd la sélection et l'autre pour l'élément qui l'obtient.

Personnellement j'implémente comme ceci:

Code :
1
2
3
4
5
6
7
8
9
10
11
procedure TFormMain.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  if Assigned(Item) then
  begin
    if Selected then
      // Elément obtenant la sélection
    else
      // Elément perdant la sélection 
  end;
end;
Avec:
  • Sender: le TListView concerné
  • Item: l'élément concerné
  • Selected: Etat de sélection de l'élément

@+ Claudius.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 22h31   #3
gaby277
Membre du Club
 
Inscription : août 2005
Messages : 85
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 85
Points : 64
Points : 64
Par défaut Listview on select item

Bonsoir,
ça marche ! merci.
J'ignorais qu'il y avait également un évenement pour l'item désélectionné.
gaby277 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h38.


 
 
 
 
Partenaires

Hébergement Web