Центр C # формы на дополнительном экране - PullRequest
0 голосов
/ 22 мая 2018

Быстрый вопрос, надеюсь, легко исправить.Я немного новичок в C # и пытаюсь центрировать вторую форму на дополнительном экране, когда он открывается.Пока что я могу открыть его на втором экране без проблем, но он находится в левом верхнем углу, и я не могу получить его по центру.Мне известно о том, что Location = Screen.AllScreens[1].WorkingArea.Location; поместит его в верхнюю левую часть указанной рабочей зоны.Мне было интересно, если есть способ (по существу) изменить .Location на что-то еще, что будет по центру независимо от фактического размера экрана?Это будет происходить на нескольких разных системах с различными размерами экрана.Вот код, который у меня есть.

В первой форме.

public partial class FrmPrompt : Form
{
    public FrmPrompt()
    {
        InitializeComponent();
    }

    private void ButNo_Click(object sender, EventArgs e)
    {
        frmConfirm confirm = new frmConfirm();
        Screen[] screens = Screen.AllScreens;
        lblConfirmMsg.Text = "Please Wait For Customer To Confirm...";
        butContinue.Hide();
        confirm.Show();
    }
}

Во второй форме:

public partial class frmConfirm : Form
{
    public frmConfirm()
    {
        InitializeComponent();
        Location = Screen.AllScreens[1].WorkingArea.Location;
    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }
}

Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

CenterScreen будет находить форму на текущем экране, поэтому, если ваш FrmPrompt на втором экране, при нажатии ButNo - это будет работать.Но я думаю, что это не то, что вы просите.

Более того, CenterScreen перезапишет любую настройку вашего местоположения из местоположения, которое было установлено до Показать методпризывание.Поэтому я предлагаю переопределить метод OnShown frmConfirm

protected override void OnShown(EventArgs e)
{
    base.OnShown(e);
    var area = Screen.AllScreens[1].WorkingArea;
    var location = area.Location;

    location.Offset((area.Width - Width) / 2, (area.Height - Height) / 2);
    Location = location;
}
0 голосов
/ 22 мая 2018

попробуйте это в первой форме, не нужно ничего устанавливать во 2-й форме.

        //put it after this line: frmConfirm confirm = new frmConfirm();
        confirm.StartPosition = FormStartPosition.CenterScreen;
...