2015-09-21 4 views
0

J'ai une application Windows Mobile CE écrite en C# avec .Net CF.Ouvrir le fichier .net Windows après la fin de l'événement

Considérons j'ai 2 formes dans ma demande:

  1. Liste des objets (a un listview)
  2. Détails Page (devrait apparaître quand quelque chose est sélectionné dans listview précédent)

Actuellement J'attache un rappel à l'événement SelectedIndexChanged de listview et j'ouvre un nouveau formulaire.

La nouvelle forme s'ouvre bien (au milieu du rappel d'événement), mais quand je ferme le formulaire (this.Close()), alors la page de liste n'est pas cliquable pour la première fois, après que le premier clic

De plus, le ListViewItem sélectionné à la première étape n'est pas sélectionné (arrière-plan bleu).

est ici un court (12s) vidéo montrant ce problème: http://take.ms/urkme Comme vous le voyez de la vidéo, après le retour de détails écran, le bouton de rafraîchissement ne cliquez pas sur le premier clic ..

Je suis montrant les détails forment comme ceci:

private void listView_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    (new FormDetails()).ShowDialog(); 
} 

Est-il possible de montrer les détails forment après la fin de l'événement, ou je le fais complètement faux?

PS! Essayé la même chose avec un bouton et son événement de clic, alors tout a bien fonctionné ..

Répondre

0

Votre problème est dû à l'utilisation de l'événement SelectedIndexChanged. Lorsque vous sélectionnez un élément dans votre liste, vous définissez SelectedIndex, si vous sélectionnez à nouveau le même élément, l'index ne sera pas modifié et vous n'appelerez jamais l'événement.

Vous pouvez utiliser l'événement Click pour déclencher la réponse voulue.

Voici un exemple:

private void listView1_Click(object sender, EventArgs e) 
{ 
    var firstSelectedItem = listView1.SelectedItems[0]; //This is your selected item. 
    //do stuff 
} 
+0

Je vais essayer l'événement click, mais le problème ne se re-sélectionne pas, c'est que l'article ne soit jamais sélectionné je suppose .. Minus avec le clic est aussi que je ne sais pas si un élément ou emoty espace dans listview a été cliqué. Quand je clique sur l'espace vide, je ne devrais pas tirer .. – Kristian

+0

Oh, je comprends maintenant. Vous devriez avoir un shell parent pour les deux formes ou vous pourriez déclarer ListView comme le 'MdiParent' du formulaire de détail. – Oceans

+0

J'utilise Compact Framework et MDI Parent n'est pas présent là-dedans .. – Kristian

1

Comme je sais ListView « événement de SelectedIndexChanged tiré deux coups sur presque cas pas comme Button » événement de Click qui a tiré une fois, ce peut-être quelle cause cette interaction bizarre. Peut-être essayer de passer à ItemSelectionChanged comme suggéré dans here.

+0

Cela a du sens, un pour désélectionner et un pour une nouvelle sélection .. Va essayer ça! – Kristian

+0

Rappelez-vous l'astuce 'if (e.IsSelected)' :) –

+0

Aussi pour mentionner que je travaille avec Compact Framework 3.5, ItemSelectionChanged n'est pas disponible, mais j'essaierai si vous avez une intuition correcte :) – Kristian

0

Lorsque vous utilisez ShowDialog(), vous ouvrez un formulaire en mode modal. Tout autre traitement du code suivant n'aura pas lieu tant que le formulaire modal n'est pas fermé ou renvoie un DialogResult. Mieux vaut utiliser une forme non modale en utilisant .Show().

private void listView_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    (new FormDetails()).Show(); //will not stop processing of events in mainForm 
} 

Si le nouveau FormDetails est terminé, il peut utiliser un simple Cacher ou Fermer pour afficher la forme principale de premier plan. Rappelez-vous que le formulaire principal est toujours présent et n'attendra pas la fermeture de FormDetails (car il s'agit d'une boîte de dialogue non modale).