Auteur de questions
[Listview] Comment voir la ligne sélectionnée dans un listview disabled ?

Question
-
Bonjour,
Dans l'un de mes formulaires, j'utilise un listview pour afficher une liste d'éléments.
Cette liste est disabled (c'est-à-dire .Enabled=False) afin que l'utilisateur ne puisse pas modifier l'élément sélectionné.
En effet, c'est un timer du formulaire qui choisit, selon le temps qui s'écoule, lequel des éléments doit être sélectionné.
Vb6: En Vb6, je n'avais aucun problème. Le listview disabled devenait "gris" (dans un thème standard windows), tandis que la ligne sélectionnée était surlignée en bleu.
Vb9 (VbNet2008): En VbNet, la liste disabled devient bien "grise", mais aucune sélection n'apparait dés lors que la liste devient disabled...
D'où ma question : comment faire pour visualiser la ligne sélectionnée, alors que je ne veux pas que l'utilisateur puisse intervenir sur cette sélection ?
PS: En Vb6 comme en VbNet, j'ai bien sur pris soin de positionner la propriété .HiseSelection à False.
MERCI d'avance pour vos idées !
Cordialement,
Golard.
Projet volumineux en cours de migration de Vb6 à VbNet2008 Visual Studio 2008 - VbNET/Vb6(COM)
Toutes les réponses
-
Bonjour,
Utilisez la méthode Select() du contrôle ListView après avoir initialisé la propriete Selected d’un élément :
this.listView1.Items[1].Selected = true;
this.listView1.Select();
Cordialement,
Alex
________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
- Marqué comme réponse Alex Petrescu vendredi 10 septembre 2010 10:12
- Non marqué comme réponse Golard lundi 13 septembre 2010 07:27
-
Bonjour,
Utilisez la méthode Select() du contrôle ListView après avoir initialisé la propriete Selected d’un élément :
this.listView1.Items[1].Selected = true;
this.listView1.Select();
Cordialement,
Alex
________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
Bonjour Alex Petrescu,Merci pour votre message (que vous avez déjà marqué comme réponse).
Malheureusement, votre solution ne fonctionne pas sur une liste disabled.
Pour le reproduire, il suffit de:
- placer un treeview sur un formulaire
- positionner sa propriété Enabled à False dans le New
- Exécuter les commandes
Me
.listView1.Items(2).Selected = True
etMe
.listView1.Select()
Vous verrez que la liste est "grisée" (signalant son état disabled) et que la ligne sélectionnée n'apparait pas, CONTRAIREMENT à la même liste en Vb6.
Votre code fonctionne bien sur avec une liste Enabled=True, mais ce n'était pas le sujet de ma question...
Merci si vous pouvez m'aider à résoudre ce problème.
Cordialement,
Projet volumineux en cours de migration de Vb6 à VbNet2008 Visual Studio 2008 - VbNET/Vb6(COM) -
Bonjour,
Je vous propose un contournement.
Laissez la propriété ‘enable’ égale à ‘true’. Choisissez la couleur du contrôle :
this.listView1.BackColor = System.Drawing.SystemColors.ControlLight;
Ajoutez une méthode pour l’évènement ItemSelectionChanged:
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
for (int i = 0; i < this.listView1.Items.Count - 1; i++)
this.listView1.Items[i].Selected = false;
this.listView1.Items[2].Selected = true;
this.listView1.Select();
}
Comme ça, l’utilisateur ne peut jamais changer l’élément sélecté et l’apparence du contrôle est ‘disabled’.
Cordialement,
Alex
________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
- Marqué comme réponse Alex Petrescu vendredi 17 septembre 2010 08:36
- Non marqué comme réponse Alex Petrescu lundi 20 septembre 2010 09:12
-
Bonjour Golard,
Est-ce que cette solution répond a votre besoin ?
Cordialement,
Alex
________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
-
Merci Alex pour vos réponses,
Cette solution peut répondre à mes besoins dans le principe.
J'avais personnellement envisagé une autre solution similaire qui consistait à avoir la liste réellement disabled, mais colorer artificiellement l'élément sélectionné par le code.
Concernant votre code, il semble ne pas fonctionner : la ligne [2] resélectionnée artificiellement s'affiche en bleu seulement une fraction de seconde, puis plus aucune ligne ne semble sélectionnée (mise à par le focus qui continue d'afficher la ligne cliquée par l'utilisateur, donc à gérer également).
Avez-vous testé votre code ? Ou est-il théorique ? Il semble que des intéractions évènementielles sur la liste l'empêche de fonctionner...
Projet volumineux en cours de migration de Vb6 à VbNet2008 Visual Studio 2008 - VbNET/Vb6(COM) -
Bonjour Golard,
Désolé pour l’erreur, je n’ai pas envisagé les modifications apportées par le changement de la propriété Selected sur l’évènement ItemSelectionChanged. J’ai testé avec l’évènement Click et ça marche. Je vous prie de me confirmer si cette solution vous convient.
Cordialement,
Alex
________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.