Maximize MDI child form

前端 未结 5 1424
半阙折子戏
半阙折子戏 2021-01-02 07:34

I\'m working on a legacy WinForms MDI application and have some trouble making the child forms behave as I want. My objective is to have the child form always maxim

相关标签:
5条回答
  • 2021-01-02 08:12

    You can override the OnResize of each child form you want to make sure does not minimize. Or create a BaseForm and inherit all children forms from it.

    protected override void OnResize(EventArgs e)
    {
       this.WindowState = FormWindowState.Maximized;
    }
    

    Also, you can use X,y coordinates, but OnResize should be enough. Put this in the child form constructor:

       this.WindowState = FormWindowState.Maximized;
    
       Point NewLoc = Screen.FromControl(this).WorkingArea.Location;
       //Modifiy the location so any toolbars & taskbar can be easily accessed.
       NewLoc.X += 1;
       NewLoc.Y += 1;
       this.Location = NewLoc;
    
       Size NewSize = Screen.FromControl(this).WorkingArea.Size;
       //Modifiy the size so any toolbars & taskbar can be easily accessed.
       NewSize.Height -= 1;
       NewSize.Width -= 1;
       this.Size = NewSize;
    
       this.MinimumSize = this.Size;
       this.MaximumSize = this.MinimumSize;
    

    I got the code for the X,Y from here: http://bytes.com/topic/c-sharp/answers/278649-how-do-i-prevent-form-resizing

    0 讨论(0)
  • 2021-01-02 08:15

    This is how I overcame the same promblem, cannot remember where I found the code.

    private const int WM_SYSCOMMAND = 0x112;
    private const int SC_MINIMIZE = 0xF020;
    private const int SC_MAXIMIZE = 0xF030;
    private const int SC_CLOSE = 0xF060;
    private const int SC_RESTORE = 0xF120;
    
    protected override void WndProc(ref Message msg)
    {
      if ((msg.Msg == WM_SYSCOMMAND) && 
        (((int)msg.WParam == SC_MINIMIZE) || ((int)msg.WParam == SC_MAXIMIZE) ||
        ((int)msg.WParam == SC_CLOSE)) || ((int)msg.WParam == SC_RESTORE))
        {
          //do nothing
        } // end if
        else
        {
          base.WndProc(ref msg);
         } // end else
    }
    
    0 讨论(0)
  • 2021-01-02 08:22

    In my app I found if I put just these two lines in the form loaded event it worked. Thanks sarvjeet for the basic idea. +1 for you

    this.WindowState = FormWindowState.Minimized;
    this.WindowState = FormWindowState.Maximized;
    
    0 讨论(0)
  • 2021-01-02 08:31

    The problem wasn't easy to solve, but I accidentally found the answer and it's quite simple; set the windowstate of the child form to Normal by default. Then make sure that you reset the windowstate of the child window AFTER you call the Show() method.

    Example:

    private void ShowNewForm(object sender, EventArgs e)
    {
      Form childForm = new Form();
      childForm.MdiParent = this;
      childForm.Text = "Window " + childFormNumber++;
      childForm.Show();
      childForm.WindowState = FormWindowState.Maximized;
    }
    
    0 讨论(0)
  • 2021-01-02 08:31
    form1 obj = new form1 ();
    obj.MdiParent = MDIGracular.ActiveForm;
    obj.StartPosition = FormStartPosition.CenterParent;
    obj.WindowState = FormWindowState.Minimized;
    obj.Dock = DockStyle.Fill;
    obj.Show();
    obj.WindowState = FormWindowState.Maximized;
    
    0 讨论(0)
提交回复
热议问题