Repositionnement d’un Windows Form (emplacement)

Comment positionner un Windows Form en bas à droite de l’écran lorsqu’il est ouvert, au lieu de gauche en haut?

Situation: J’ai un Form1 qui ne fait rien en tant que formulaire, je l’ai juste utilisé pour son menu contextuel (mon application ne fonctionne que depuis le bac). Ainsi, la plupart du code en cours d’exécution passe dans la classe Form1. Lorsque vous cliquez sur un menu contextuel, il effectue un traitement et affiche finalement Form2 . Donc, Form2 est ouvert / appelé par un élément de menu contextuel de Form1 . Comment changer la position de Form2 dans ce cas?

Form1.cs (partie où Form2 est déclenché)

private void menu_upload_file_Click(object sender, EventArgs e) { DialogResult dialogOpened = openFileDialog1.ShowDialog(); if (dialogOpened == DialogResult.OK) { ssortingng filename = openFileDialog1.FileName; using (var client = new WebClient()) { var response = client.UploadFile("http://localhost/imgitv3/upload.php?submit=true&action=upload&request=app", "POST", filename); // ssortingng path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + Path.DirectorySeparatorChar + "response.txt"; if (response != null) { ssortingng responseContent = System.Text.Encoding.ASCII.GetSsortingng(response); Form2 linkWindow = new Form2(); if (isURL(responseContent)) { linkWindow.toTextBox(responseContent); linkWindow.Show(); } } } } } 

Form2.Designer.cs

 // // Form2 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CausesValidation = false; this.ClientSize = new System.Drawing.Size(419, 163); this.Controls.Add(this.textBox2); this.Controls.Add(this.textBox1); this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.MaximumSize = new System.Drawing.Size(435, 202); this.MinimizeBox = false; this.MinimumSize = new System.Drawing.Size(435, 202); this.Name = "Form2"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Text = "IMGit Image Uploader"; this.TopMost = true; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.Load += new System.EventHandler(this.Form2_Load); this.ResumeLayout(false); this.PerformLayout(); 

Il y a deux choses que vous devez savoir. La première est la zone de travail de l’écran sur lequel vous allez afficher le formulaire. La zone de travail est la taille de l’écran moins les barres de tâches affichées sur cet écran. Vous pouvez utiliser la propriété Screen.WorkingArea pour cela.

La seconde est la taille réelle de la fenêtre. Ce qui n’est généralement pas la taille de la forme du formulaire, votre utilisateur peut avoir modifié la taille du texte dans la barre de titre de la fenêtre ou peut-être exécuter la carte vidéo dans un paramètre DPI différent de la vôtre. Vous devez attendre que l’événement Load du formulaire se déclenche avant de connaître cette taille.

Faites en sorte que votre code ressemble à ceci, en supposant que vous souhaitiez afficher le formulaire sur le moniteur principal:

  var frm = new Form2(); frm.Load += (s, ea) => { var wa = Screen.PrimaryScreen.WorkingArea; frm.Location = new Point(wa.Right - frm.Width, wa.Bottom - frm.Height); }; frm.Show(); 

Qui déplace la fenêtre juste avant qu’elle ne devienne visible. La propriété StartPosition du formulaire n’a pas d’importance.

Vous pouvez définir la propriété de formulaire StartPosition=Manual et définir les propriétés form.left et form.top sur les valeurs souhaitées.

Vous devez les définir avant que la boîte de dialog ne soit affichée.

 Form2 linkWindow = new Form2(); linkWindow.StartPosition = FormStartPosition.Manual; linkWindow.Left = 200; linkWindow.Top = 200; if (isURL(responseContent)) { linkWindow.toTextBox(responseContent); linkWindow.Show(); } 

Jouez avec les valeurs de gauche et de haut

Accrochez l’événement FormLoad à partir de votre Form2:

 Form2 linkWindow = new Form2(); linkWindow.FormLoad += Form2_Load; 

Puis ajoutez cette méthode quelque part:

  private void Form2_Load(object sender, EventArgs e) { this.StartPosition = FormStartPosition.Manual; this.Location = new Point(400, 400); //set x,y to where you want it to appear } 

Modifiez les valeurs X, y en fonction de la position de votre fenêtre.

Suite aux réponses concernant this.StartPosition = FormStartPosition.Manual et location etc. Pour calculer où placer le formulaire, on peut utiliser la classe Screen et sa propriété WorkingArea. http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.aspx