7
votes

Coordonnées de localisation sur ordinateur montrant x = -32000, y = -32000

J'ai une application C # qui enregistre son état lorsqu'elle est fermée, puis se lit dans l'état enregistré lorsqu'il démarre. Un élément enregistré est l'emplacement de la forme principale. Normalement, cela fonctionne bien - dans mon code, une ligne est une ligne comme celle-ci qui enregistre l'emplacement dans un fichier qui est ensuite lié dans le démarrage: xxx p> normalement, les coordonnées de l'emplacement ressemblent à ceci sur Ma machine avec plusieurs moniteurs: xxx

occasionnellement, je verrai des coordonnées qui sont enregistrées comme ceci: xxx

puis Lorsque l'utilisateur apporte l'application sauvegardée, le formulaire éteint le bureau et ne peut pas (facilement) être récupéré par un utilisateur moyen.

Que se passe-t-il pour que les coordonnées soient lues de cette façon et sont Il y a des suggestions pour empêcher cette situation?


0 commentaires

3 Réponses :


10
votes

Les coordonnées que vous voyez sont dues au fait que l'application est minimisée lorsqu'elle est fermée. Windows "masque" votre formulaire en le déplaçant de ses coordonnées à certains coordonnées x, y ridiculement importants.

vérifié programmatiquement: p>

sortie d'une application de formulaire sur Vista: P>

Coordonnées actuelles X: 184 Y: 184 * Emplacement par défaut
Coordonnées actuelles x: - 32000 strong> y: - 32000 strong> * Emplacement minimisé P>

à partir du code: P>

System.Diagnostics.Debug.WriteLine("Current coordinates X: " + Location.X + "  Y: " + Location.Y );


4 commentaires

Une meilleure solution consiste à conserver les coordonnées non minimisées en mémoire, puis à les sauvegarder quand il se ferme.


Comment détecterai-je les coordonnées non minimisées?


@Mark: où que vous placiez la logique, vous devez vérifier et décider si les coordonnées sont minimisées ou non.


Vérifiez Windowstate Enum: msdn.microsoft.com/fr- US / Bibliothèque / ...



5
votes

Utilisez la propriété RestaOutBounds sur votre formulaire.

Edit: Voici une copie / pâte de certains de mes codes (pourrait probablement utiliser un peu de nettoyage, mais cela obtient le point). Cela vient de la formulaire de mon formulaire de ma forme principale Gestionnaire d'événements: xxx

et voici comment restaurer l'état sur charge (N'oubliez pas de définir le mode de position initiale de votre formulaire sur manuel pour éviter tout scintillement) : xxx


3 commentaires

Merci, Jon. Pouvez-vous me signaler à une URL l'explication sur la manière dont vous utilisez programme.appsettings? Je n'ai pas d'appsettings sous mon objet de programme.


C'est ma propre classe personnalisée qui gère les paramètres de l'application. Comme je l'ai dit, ce code était copié / collé directement de l'un de mes programmes.


C'est le moyen et le seul moyen de faire, d'empêcher le scintillement ou l'emplacement de la forme modifiée avant l'événement de spectacle. La deuxième partie du code doit être effectuée après initializecomonent () et avant l'événement Afficher, et comme JON mentionné, le STARTPOSITION Propriété du formulaire doit être définie sur FORMSARTPOSITION.MANUELLE , sinon certains paramètres peuvent être modifiés après avoir été défini (avant l'événement Afficher). Un fichier XML personnalisé peut être utilisé à la place des paramètres diaboliques pour éviter le schéma de dénomination de répertoire très gênant.



0
votes

Répondre à la question principale " Qu'est-ce qui se passe ":

J'ai trouvé que cela a été facilement reproduit tout en appuyant sur Ctrl + D pendant que l'application est en cours d'exécution (= raccourci pour minimiser toutes les fenêtres et afficher le bureau).

Bien que votre fenêtre soit minimisée et que vous définissez window.visible = false Vous obtiendrez les deux coords (haut, gauche) = -32000 . Cette tentative est incorrecte car la fenêtre est déjà minimisée (= cachée) et que vous modifiez les coordonnées.

à la place, vous devriez être réglé window.showintaskbar = false qui est plus correct et le problème avec Coord -32000 Dissays.


0 commentaires