2011-10-11 1 views
-2

Je me demandais, comment obtenez-vous les coordonnées d'un formulaire?Obtenez les coordonnées d'un formulaire

J'ai une application qui a actuellement un bouton. Ce bouton est au hasard repositionné toutes les 1 seconde. Cependant, je veux que ce bouton soit toujours repositionné dans le formulaire - plutôt que de sortir des limites du formulaire. Donc, je pensais que je devrais trouver les limites de la forme et l'utiliser afin de s'assurer que le bouton est toujours dans les limites de la forme. Comment puis-je obtenir la hauteur et la largeur du formulaire?

Je le code suivant travail (Mais la taille de l'écran de l'utilisateur n'est pas ce que je veux):

int screenHeight = Screen.PrimaryScreen.WorkingArea.Height; 
int screenWidth = Screen.PrimaryScreen.WorkingArea.Width; 

shouldn ce travail de code?

int xPosition = position.X; 
int yPosition = position.Y; 
int num = random.Next(screenHeight); 
int num1 = random.Next(screenWidth); 

Point templocation; 
templocation = new Point(num1, num); 


ClickMe.Location = templocation; 
templocation.X = num1; 
templocation.Y = num; 

Toute aide serait grandement appréciée.

PS. J'ai vu ce site http://msdn.microsoft.com/en-us/library/system.windows.forms.control.resize(v=vs.71).aspx mais la ligne "Control control = (Control) sender;" génère une erreur ...

Répondre

1

Après votre mise à jour est ici la nouvelle réponse:

Lors du positionnement de votre bouton, vous devez vous assurer de ne pas dépasser les limites des formes. Donc, la position gauche de votre bouton se situe entre

int leftMin = 0; 
int leftMax = myForm.ClientSize.Width - myButton.Width; 

que pour la position supérieure

int topMin = 0; 
int topMax = myForm.ClientSize.Height - myButton.Height; 

Donc, pour votre exemple du bouton:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    Random random = new Random(); 
    int x = random.Next(0, ClientSize.Width - button1.Width); 
    int y = random.Next(0, ClientSize.Height - button1.Height); 
    button1.Location = new Point(x, y); 
} 

Old réponse ...

Si vous cherchez g pour la position de la forme actuelle à l'écran:

int xPosition = this.Location.X;  
int yPosition = this.Location.Y; 

ou

Point position = this.Location; 

Bien que l'emplacement sera "0, 0" dans le constructeur de formes.

+0

Hmmm ..... je suppose que cela obtient la taille initiale de l'écran? Fondamentalement, j'ai une minuterie qui change la position du bouton. Mais je veux que le bouton soit toujours dans les limites de la taille de l'écran de formulaire. Il semble quand j'utilise ceci que le bouton reste dans la zone générale avant que le formulaire soit étendu en taille ... – BigBug

+0

Ok, je pense vraiment que vous devriez éditer votre question originale pour dire à chacun exactement ce que vous essayez d'accomplir. En ce moment, il semble que vous êtes en train de bousiller les termes "Formulaire", "Bouton", "Position", "Taille" et comme il y a une profonde incompréhension de la façon dont fonctionne la POO sur Windows Forms ... – Oli

+0

Ok, mis à jour .. .. – BigBug

0

Utilisez location (qui est de type point) de la forme:

this.Location 

(utiliser ce lieu de Form1)

aussi:

this.Height 
this.Width 
+0

Form1.Location n'existe pas .... – BigBug

0

Le Form.Location propriété vous donne "Le point qui représente le coin supérieur gauche du formulaire en coordonnées écran."

+0

Je reçois des erreurs étranges lorsque j'essaie d'utiliser cela .... donc je ne suis pas sûr de savoir quoi faire à ce sujet ... "Erreur Un objet une référence est requise pour le champ, la méthode ou la propriété non statique 'System.Windows.Forms.Form.Location.get' " – BigBug

+1

@BlueButtons: Vous ne pouvez pas écrire' Form.Location' dans votre code, car il s'agit de la syntaxe pour accéder à une propriété statique (ou propriété de classe). Vous avez besoin d'une instance de la classe 'Form' pour accéder à cette propriété. Vous avez déjà une instance dans votre code. À partir du code _inside votre formulaire class_ vous pouvez accéder aux propriétés en tapant 'this.Location'. A partir du code en dehors de votre classe, vous avez besoin d'une variable 'Form' pour accéder aux propriétés - par ex. quelque chose qui est passé à une méthode: 'void foo (Form myForm) {Point location = myForm.Location; } '. Peut-être que vous devriez lire un livre sur la programmation orientée objet ... – Stephan

+0

Hmm .... ok, donc je comprends maintenant. Cependant, il semble que lorsque le formulaire est développé, il n'est pas détecté? J'ai un bouton que je veux toujours avoir se repositionner dans les limites du formulaire. Cependant, le bouton se déplace simplement dans les limites de la taille du formulaire d'origine ... que dois-je faire? – BigBug

0

Pour largeur et la hauteur, utilisez

form.Size.Width 
form.Size.Height 
+0

hmm j'ai essayé ceci et pour une raison quelconque il ne capture pas la taille réelle du formulaire .... – BigBug

+0

Que capture-t-il, alors? Comment l'avez-vous appelé? –

Questions connexes