c#.net Windows 表单位置

c#.net Windows Form Location

您好,我无法正常工作,表格每次都在屏幕上的不同位置启动,我做错了什么?我在表单加载时设置位置点。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Report_Maintenance
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Form1 frm1 = new Form1();
            frm1.StartPosition = FormStartPosition.Manual;
            frm1.Left = 500;
            frm1.Top = 500;           
        }
    }
}

Form1_Load方法运行s时,表单已经创建。当您 运行 Form1 frm1 = new Form1(); 时,这会创建另一个永远不会显示的表单(因为您永远不会调用 frm1.Show()frm1.ShowDialog())。相反,请使用当前表单。可以通过关键字this.

来引用

此外,请尽快执行此操作,即在构造函数中,但要在表单初始化之后,即在 InitializeComponent(); 之后。 InitializeComponent 设置所有表单属性并创建您在表单设计器中定义的所有控件。

public Form1()
{
    InitializeComponent();
    this.StartPosition = FormStartPosition.Manual;
    this.Left = 500;
    this.Top = 500; 
}

由于这些成员在 class 中自动识别,您也可以省略 this 关键字。

public Form1()
{
    InitializeComponent();
    StartPosition = FormStartPosition.Manual;
    Left = 500;
    Top = 500; 
}

请注意,仅供说明之用:您可以打开同一表单的多个实例。这将在不同的屏幕位置打开 3 个实例:

for (int i = 0; i < 3; i++) {
    Form1 frm1 = new Form1();
    frm1.StartPosition = FormStartPosition.Manual;
    frm1.Left = 200 + i * 100;
    frm1.Top = 400 + i * 50;
    frm1.Text = $"This is instance #{i} of Form1"; // Set the form caption.
    frm1.Show();
}

另请参阅:this (C# Reference)