MDI дочерняя форма максимизируется windowstate - BorderStyle - PullRequest
4 голосов
/ 22 октября 2011

Я хочу открыть дочернюю форму внутри родителя с максимизированным состоянием окна.

Я не хочу позволить пользователю свернуть / развернуть / закрыть это дочернее окно,

, поэтому я установил BorderStyle = None для дочернего окна, а также для MaximizeBox и MinimizeBox свойств установлено значение False, также установлено WindowState = Maximized

Но при запуске программы отображаются все Minimize, Restore и Close кнопки для этой childForm в развернутом состоянии.

, но если я нажму Restore Down, то для этой childForm границы не будет .. Сейчас также нет способа восстановить его в развернутом состоянии ..

Я что-то пропустил?Это ошибка?Как правильно заставить его работать правильно?

Ответы [ 4 ]

1 голос
/ 10 ноября 2016

просто попробуйте это.

protected override void WndProc(ref Message m)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MOVE = 0xf010;
    switch (m.Msg)
    {
        case WM_SYSCOMMAND:
            int command = m.WParam.ToInt32() & 0xfff0;
            if (command == SC_MOVE)
                return;
            break;

    }
    base.WndProc(ref m);
}
0 голосов
/ 01 ноября 2011

Не устанавливайте его максимально, просто установите ширину и высоту MdiParent ...

Height = this.Height;
Width = this.Width;

this.Width должна быть родительской формой

Надеюсь, это поможет, если это не так. Напишите мне письмо:)

beanlovin@gmail.com

0 голосов
/ 17 июня 2014
Form1 fr = new Form1(); 
fr.MdiParent = this; //set form's parent to Mdiform
fr.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //set form without maximize,minimize and close button
fr.Dock = DockStyle.Fill; //set form's dock property to fill
fr.Show();
0 голосов
/ 22 октября 2011

Итак, вы можете создать свою собственную форму (обычную форму) и затем наследовать эту пользовательскую форму в дочернюю форму mdi

Вы должны поместить приведенный ниже код в «пользовательскую форму»

   public partial class BaseForm : Form
   {
       public BaseForm()
       {
           InitializeComponent();
           StartPosition = FormStartPosition.WindowsDefaultLocation;
           MaximizeBox = false;
           Width = 806;
          //Width = 850;
          //Height = 760;
           Height = 730;
          //Width = 790;
          //Height = 617;
    }

//[DllImport("user32.dll")]
//[return: MarshalAs(UnmanagedType.Bool)]
//private static extern bool ShowScrollBar(IntPtr hWnd, int wBar, bool bShow);
//private enum ScrollBarDirection { SB_HORZ = 0, SB_VERT = 1, SB_CTL = 2, SB_BOTH = 3 } 


protected override void WndProc(ref Message m)
{
  const int WM_SYSCOMMAND = 0x0112;
  const int SC_MOVE = 0xF010;
  //ShowScrollBar(this.Handle, (int)ScrollBarDirection.SB_BOTH, false);
  switch (m.Msg)
  {
    case WM_SYSCOMMAND:
      int command = m.WParam.ToInt32() & 0xfff0;
      if (command == SC_MOVE)
        return;
      break;
   }
   base.WndProc(ref m);
 }
}

вы должны и должны поставить свою детскую форму mdi minimum size to '0' и size to Width = 806; Height = 730;

Надеюсь, это поможет вам ...

...