Как определить местоположение экрана дочерней формы MDI? - PullRequest
0 голосов
/ 29 августа 2010

У меня есть основная форма 'MainForm' с IsMdiContainer = true

У меня есть одна или несколько динамически созданных дочерних форм, где я устанавливаю MdiParent = MainForm

Теперь я хочу сделатьбыть в состоянии отсоединить эти дочерние формы, установив MdiParent = null, но с сохранением точно такого же местоположения экрана.

Я пытался использовать ChildForm.PointToScreen (ChildForm.Location), но это дает мне расположение на экранеотносительно клиентской области формы.

EDIT

PointToScreen () в самой форме дает мне почти правильное местоположение, за исключением того, что оно дает расположение экрана0,0 внутри формы, в то время как .Location относится к внешнему краю формы.

1 Ответ

3 голосов
/ 29 августа 2010

Вы должны использовать метод PointToScreen () окна клиента mdi:

    private void button1_Click(object sender, EventArgs e) {
        if (this.MdiParent != null) {
            MdiClient client = null;
            foreach (Control ctl in this.MdiParent.Controls) {
                if (ctl is MdiClient) { client = ctl as MdiClient; break; }
            }
            this.WindowState = FormWindowState.Normal;
            Point loc = client.PointToScreen(this.Location);
            this.MdiParent = null;
            this.Location = loc;
        }
    }

Вы не можете избежать небольшого смещения, полученного на Aero, или мерцания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...