-2
votes

Obtenir le centre de l'écran

Remarque: Utilisation C # Formulaire Windows dans Visual Studio 2017

Le code ci-dessous est maintenant correct pour une utilisation future.

J'essaie de développer du code qui m'aidera Détecter dans quel quadrant la souris est chacune de 0,5 seconde. J'ai d'abord essayé avec 0 mais j'ai découvert qu'il n'y a pas de valeur négative pour la position de la souris en C #. Donc, au lieu de cela, je pensais utiliser la largeur et la hauteur que j'ai calculée avec: xxx

code complet ici: xxx

Ensuite, j'ai utilisé ce qui suit pour détecter le quadrant: xxx

Cependant, lorsque j'imprime ma liste, je reçois toujours le quadrant 1. Y a-t-il un meilleur moyen d'obtenir le centre de l'écran afin que je puisse faire mes conditions de manière correcte?

N'oubliez pas que j'essaie de le faire à l'extérieur du formulaire et non nécessairement.


11 commentaires

Veuillez nous montrer où vous utilisez la méthode addmouseposition () . Il semble également que vous définissez votre criblage uniquement sur le W et h de votre SetScreensize () . Il est donc possible que vous appeliez votre chèque avec une valeur par défaut 0 sur w et h , qui aboutira au quadrant 1.


Il me manque des variables dans le code fourni. La première fonction SetScreensize remplit deux variables locales. L'addmousposition utilise quatre paramètres, mais il est inconnu d'où cela vient. Surtout le second est d'intérêt, car cela définit le si / sinon dans la routine


SetCreenSize () est appelé sur la charge de formulaire


addmousposition dans l'intérieur d'une classe statique et il reçoit W et H qui sont définis par SetScreenSize ();


Les valeurs d'écran d'accumulation sont-elles correctes? Assurez-vous que la demande est déclarée DPI au courant. Comment obtenez-vous la position de votre souris?


Souris.x et souris.y.y


C'est le but. Vous ne définissez que des variables locales et aucun membre de la classe.Vous approchez-vous de fonctionner lorsque vous définissez des champs ou des propriétés pour H et w et utilisez-les dans SETSCréenSize () < / code>


J'ai mis à jour la question pour inclure le code complet


Remplacez le int h et le int w dans votre méthode par juste h et w .


Oups tu as raison! Je me demande pourquoi ça ne me plaignait pas


@Sarakat: La raison pour laquelle je suggère que la modification a été, que vous modifiez votre question afin que le problème que vous n'ayez plus d'octure, donc la question que cela ne montre pas le problème que vous avez eu.


3 Réponses :


0
votes

Je créerais 4 rectangle s puis utilisez rectangle.contains pour vérifier où la souris est: xxx

alors vous pouvez faire Un simple .Contains à vérifier le pointeur de la souris: xxx


2 commentaires

J'en ai besoin pour travailler comme taille d'écran, le formulaire sera minimisé pendant qu'il les détecte.


Screen.FromControl obtiendra les limites de l'écran que le «plus» du formulaire s'allume, quel que soit le nombre d'écrans sont attachés.



1
votes

problème d'étendue?

public void setScreenSize()
{
    W = Screen.PrimaryScreen.Bounds.Width;
    H = Screen.PrimaryScreen.Bounds.Height;
    Console.WriteLine("Height is: " + H + "width is: " + W);
}


0 commentaires

0
votes

résumer mes commentaires d'en haut:

Lorsque vous appelez setScreenSize () code> à partir de OnFemeLoDload () code> Vous ne définirez que les variables locales w et h code> Vous avez défini dans vos méthodes. p> xxx pré>

de sorte que ces variables masqueront vos champs que vous avez déclarés dans le P> xxx pré>

de sorte que les champs de classe ne sont pas initialisés, ils ont leur par défaut (int) code> valeur 0 code>. p>

Lorsque vous appelez maintenant votre addmouseposition () code> Vous utiliserez toujours la valeur par défaut 0 code> au lieu des valeurs réelles que vous avez stockées dans le int h code> et int w code> p> xxx pré>

et donc votre code ajouter (1) code> la plupart du temps. Seulement dans le coin supérieur gauche de votre écran, vous devez entrer dans la branche ajouter (3) code>. P>

alors retirez le int code> à l'avant de la local w code> et h code> va corriger le problème. p> xxx pré>

pour clarification que je recommande d'utiliser ceci. : P>

public void setScreenSize()
{
    this.W = Screen.PrimaryScreen.Bounds.Width;
    this.H = Screen.PrimaryScreen.Bounds.Height;
    Console.WriteLine("Height is: " + this.H + "width is: " + this.W);
}


0 commentaires