Как предотвратить перемещение / перемещение формы mdichild на экране

#.net #vb.net #winforms

#.net #vb.net #winforms

Вопрос:

Я хочу исправить положение дочерней формы mdi. чтобы никто не мог переместить ее из одного места в другое. Я пытаюсь реализовать следующий код, но он выдает ошибку для screen.width Вот мой код: — Поместите этот код в модуль:

 public Sub CenterMe(Myform as Form)
    with Myform
        Myform.Left = (Screen.Width - .Width) / 2
        Myform.Top = (Screen.Height - .Height) / 2 ' - mdiMain.StatusBar.Height 
    End With
End Sub
 

теперь в событии загрузки формы дочерних элементов — назовите это так:

 Private Sub Form_Load()
    'do some initialization stuff... 
    '...
    Call CenterMe(me)
End Sub
 

Комментарии:

1. «это выдает ошибку для screen.width» В чем ошибка?

Ответ №1:

После того, как установлено начальное местоположение формы, вы можете запретить изменение положения формы с помощью переопределения метода WndProc формы и прослушивания сообщения Windows WM_MOVE, подобного этому.

 protected override void WndProc(ref Message message)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MOVE = 0xF010;

    switch (message.Msg)
    {
        case WM_SYSCOMMAND:
            int command = message.WParam.ToInt32() amp; 0xfff0;
            if (command == SC_MOVE)
                return;
            break;
    }

    base.WndProc(ref message);
}
 

Комментарии:

1. где в проекте вы бы разместили этот код, чтобы не допустить, чтобы дочерние формы MDI отображали местоположение. У меня есть формы, которые, когда они являются первой формой, вызываемой в MDI, выстраиваются в top = 0, но уже есть форма, открывающая показ в top = -8