如果Windows窗体打开而不是左上角,如何将其定位到屏幕的右下角?
情况:我有 Form1 ,它实际上并没有作为表单执行任何操作,我只是将其用于其上下文菜单(我的应用程序仅从托盘中运行)。因此,大多数主要运行代码都进入Form1类。单击上下文菜单时,它将执行一些处理,最后将显示 Form2 。因此 Form2 会被 Form1 的上下文菜单项打开/调用。在这种情况下,如何更改Form2的位置?
Form1.cs (触发 Form2 的部分)
private void menu_upload_file_Click(object sender, EventArgs e)
{
DialogResult dialogOpened = openFileDialog1.ShowDialog();
if (dialogOpened == DialogResult.OK)
{
string 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);
// string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + Path.DirectorySeparatorChar + "response.txt";
if (response != null)
{
string responseContent = System.Text.Encoding.ASCII.GetString(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();
答案 0 :(得分:5)
您需要了解两件事。首先是您要在其上显示表单的屏幕的工作区。工作区域是屏幕的大小减去该屏幕上显示的任务栏。您可以使用Screen.WorkingArea属性。
其次是窗口的实际大小。这通常不是表单的设计大小,您的用户可能已经更改了窗口标题栏中文本的大小,或者可能在与您的DPI设置不同的DPI设置中运行视频适配器。您必须等到表单的Load事件在您知道该大小之前触发。
因此,假设您要在主监视器上显示表单,请使代码看起来像这样:
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();
在窗口变得可见之前重新定位窗口。表单的StartPosition属性并不重要。
答案 1 :(得分:2)
您可以设置表单属性StartPosition=Manual
,然后将form.left
和form.top
属性设置为所需的值。
您应该在显示对话框之前设置它们。
Form2 linkWindow = new Form2();
linkWindow.StartPosition = FormStartPosition.Manual;
linkWindow.Left = 200;
linkWindow.Top = 200;
if (isURL(responseContent))
{
linkWindow.toTextBox(responseContent);
linkWindow.Show();
}
使用左值和上限值进行游戏
答案 2 :(得分:2)
从表单2中隐藏表单加载事件:
Form2 linkWindow = new Form2();
linkWindow.FormLoad += Form2_Load;
然后在某处添加此方法:
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
}
将X,y值更改为您想要定位窗口的任何值。
答案 3 :(得分:2)
关于this.StartPosition = FormStartPosition.Manual和location等的答案。要计算Form的位置,可以使用Screen类及其WorkingArea属性。 http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.aspx