2012-04-04 5 views
2

Похоже, немой вопрос, но я попробовал следующее (где «Me» является формой MdiParent):Как разместить форму MDIChild в нижнем правом углу MDIParent?

Dim frmNotif As New frmNotifica 
With frmNotif 
    .MdiParent = Me 
    .StartPosition = FormStartPosition.Manual 
    .Location = New Point(ClientSize.Width - .Width, ClientSize.Height - .Height) 
    .Show() 
End With 

, но он не работает.

Идеи?

+0

«Не работает» - это ужасная диагностика. Типичная проблема здесь - жирные границы, которые Aero ставит вокруг окна. По причинам appcompat вы получаете неправильный размер окна. Для этого нет чистого исправления, добавление 4 к размеру - это исправление Q & D. –

+0

«Не работает» означает, что он не расположен так, как предполагалось ;-) –

ответ

2

Если у вас есть «пустой» форму Родитель MDI (нет панели или ToolStrips не пристыкован), это должно работать:

Dim frmNotif As New frmNotifica 
With frmNotif 
    .MdiParent = Me 
    .StartPosition = FormStartPosition.Manual 

    Dim leftStart As Integer = Me.ClientSize.Width - (.Width + (SystemInformation.Border3DSize.Width * 2)) 
    Dim topStart As Integer = Me.ClientSize.Height - (.Height + (SystemInformation.Border3DSize.Height * 2)) 

    .Location = New Point(leftStart, topStart) 
    .Show() 
End With 

Если у вас есть панель или ее ToolStrip добавляемые к MdiParent, вы должны фактор, который в вашем уравнении тоже.

+2

Две проблемы: этот код нужно запускать в обработчике события Load формы, чтобы любое автоматическое масштабирование было завершено. И взлома Border3DSize не будет работать на XP или если Aero выключен. –

+0

Большое спасибо! Это решает мою актуальную проблему. Проблема, которую я буду очень скоро: что произойдет, если конкретная форма, которую я хочу отобразить в нижнем правом углу, без полей? Похоже, SystemInformation.Border3DSize - это стандартный размер границ формы для всей системы ... Кажется, мне нужно будет проверить все типы форм, которые я хочу отображать там :-) –

+0

@AndreaAntonangeli Уделите внимание комментариям Hans Passant , Это решение * может * не работать при любых обстоятельствах. Если позиционирование дочерних форм имеет решающее значение для приложения, MDI не может быть лучшим способом приблизиться к нему. – LarsTech