7
votes

Pourquoi ce code fonctionne-t-il sur Windows 7, mais pas sur Windows XP?

Un peu de fond: je suis un WPF à Winforms Converee et depuis un certain temps, j'ai migré ma demande.

J'ai été signalé par un ami que mon code ne fonctionne pas sur Windows XP (il génère un Stack Overflow au démarrage) Même si cela fonctionne bien sur Windows 7 (que je développe dans). P>

Après un peu de recherche, qu'est-ce que le problème était quelque chose dans ces lignes: P>

 private void listView1_SelectedIndexChanged(object sender, EventArgs e)
 {
     listView1.SelectedIndices.Clear();
     listView1.Items[0].Selected = true;
 }


12 commentaires

Vous devrez rouler votre propre drapeau AFAIK


Je n'ai jamais entendu parler d'une migration de WPF -> Winforms! Fair-play.


Quelle version de .NET êtes-vous en cours d'exécution? Il existe des bugs dans 4.0 fixés en installant 4,5 sur W7, mais vous ne pouvez pas faire la même chose sur XP. (Je doute que c'est ça, mais vous ne savez jamais.)


Pourquoi quelqu'un voudrait-il que quelqu'un soit de WPF à Winforms?


Je me développe en 4.0. Ceci est précisément parce que 4.5 n'est pas disponible sur XP.


Pourquoi définissez-vous sélectionné dans un événement de sélection? C'est probablement pourquoi il entre dans un débordement de pile, vous devez ajouter une meilleure vérification (c'est-à-dire si ce n'est pas l'élément que vous souhaitez sélectionné puis de la sélection autrement ignore).


Soyez conscient, alors que vous ne pouvez plus vous assurer comment votre code fonctionnera sur XP . Il existe des bugs documentés dans 4.0 fixés par la mise à niveau en 4.5, et même par bâtiment contre 4.0 Votre machine Windows 7 n'exposera plus ces bugs. (Je doute toujours que c'est la question ici, mais plus vous savez ...)


@Killercam lol j'ai pris 2 ans pour migrer de Winforms vers WPF sa si putain compliquée mais vous savez des barres de progression dans les comboboxes le rendent tellement cool


Ah ouais. Être capable de mettre n'importe quoi dans n'importe quoi est certainement un trait. :) Cependant, cette fois, j'ai besoin d'une solution plus indigène et j'espère également pouvoir le porter à Mono.


@kuraj qui l'explique;) Mais ce n'est plus supporté de Win8 afin que vous ayez besoin de faire 2 versions maintenant (ce qui est aussi très intelligent)


Quoi? Il court sur Windows 8 bien.


@Kuraj Oui, il fonctionne mais ce n'est pas pris en charge, comme XP sa toujours disponible mais ce n'est plus supporté


3 Réponses :


1
votes

Ceci peut fonctionner (non testé)

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
   if(Environment.OSVersion.Version.Major < 6) listview1.SelectedIndexChanged -= new EventHandler(listView1_SelectedIndexChanged);
   listView1.SelectedIndices.Clear();
   listView1.Items[0].Selected = true;
   if(Environment.OSVersion.Version.Major < 6) listview1.SelectedIndexChanged += new EventHandler(listView1_SelectedIndexChanged);
}


1 commentaires

Haha. Cela fait que le XP-on se comporte comme le 7 l'a fait, mais maintenant le 7 on se comporte encore plus différemment. Qu'est-ce que l'accord ici ... :)



4
votes

Essayez ceci:

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
   if (!listView1.Items[0].Selected) {
       listView1.SelectedIndices.Clear();
       listView1.Items[0].Selected = true;
   }
}


3 commentaires

Yeh mais ajouter / supprimer les événements est un peu cher / extrême :)


Je sais que c'est quelque chose de nouveau pour beaucoup de gens et je ne l'ai pas pensé de cette façon


Je suppose que cette solution de contournement est aussi simple que vous pouvez obtenir :) Cela dit, je savais déjà pourquoi le bogue se produisait. Je n'étais inquiet que pour la partie de comportement différente.



2
votes

Vérifiez et voyez si la version .NET fait toute différence. Si vous avez une version plus récente de .NET sur votre machine Windows 7 que sur XP (très probable), il est possible que ce soit des différences même si vous ciblez la version antérieure.

Voir ce que MSDN dit à propos de .NET en arrière Compatibilité .


0 commentaires