winforms 在C#中使form适应Dock的大小(或dock的大小适应dock的大小)

xmakbtuz  于 2023-05-18  发布在  C#
关注(0)|答案(1)|浏览(234)

我在C#中使用Windows窗体时遇到了麻烦,我使用了一个码头,以便在界面顶部的菜单中选择几个窗体时显示它们,这是OK的,它显示了我期望的窗体,但有一点细节:形式的最重要的部分,其中显示的按钮,将允许您保存,编辑或删除被切断,即使当我设置的形式填补其码头功能显示它(这是一个所谓的abrirForm),所以我需要正确显示完整的形式码头。下面是图片和相关代码。
你怎么看,我用的是enter image description here s
这是enter image description here
这是显示在码头内的形式的方法(它被称为“Contenedor”,它也改变了按下的选项的颜色:

private void abrirForm(IconMenuItem menu, Form formulario)
        {
            if(MenuActivo != null) {
                MenuActivo.BackColor = Color.White;
            }
            menu.BackColor = Color.Silver;
            MenuActivo = menu;

            if(FormularioActivo != null)
            {
                FormularioActivo.Close();
            }
            FormularioActivo = formulario;
            formulario.TopLevel = false;
            formulario.FormBorderStyle = FormBorderStyle.None;
            formulario.Dock = DockStyle.Fill;
            formulario.BackColor = Color.PaleGreen;

            Contenedor.Controls.Add(formulario);
            formulario.Show();
        }

这是designer.cs中的dock配置:

this.Contenedor.AllowDrop = true;
      this.Contenedor.Cursor = System.Windows.Forms.Cursors.Default;
      this.Contenedor.Dock = System.Windows.Forms.DockStyle.Fill;
      this.Contenedor.Location = new System.Drawing.Point(0, 132);
      this.Contenedor.Name = "Contenedor";
      this.Contenedor.Size = new System.Drawing.Size(918, 503);
      this.Contenedor.TabIndex = 3;
      this.Contenedor.Paint += new System.Windows.Forms.PaintEventHandler(this.Contenedor_Paint);

这就是结果:The buttons are cut off from the window

vktxenjb

vktxenjb1#

在您的情况下,可以利用控件自动调整大小属性。
由于您的子控件公式没有主窗体的大小,因为菜单按钮占用了额外的空间,您需要做的是寻找一种方法来自动增加添加到面板的控件,幸运的是,如上所述,有一个属性Autosize,当您添加子控件到面板时,永远不要设置子控件停靠填充,因为它考虑了主控件的大小,因此,为了解决您的问题,您需要做一些更改。
删除此行:
Formulario.Dock = DockStyle.Fill;
为主窗体和您以数字方式添加控件的面板设置自动缩放,因此添加以下内容:
true;
Contenedor.AutoSize = true;
所以abrirForm函数看起来是:

private void abrirForm(IconMenuItem menu, Form formulario)
        {
            if(MenuActivo != null) {
                MenuActivo.BackColor = Color.White;
            }
            menu.BackColor = Color.Silver;
            MenuActivo = menu;

            if(FormularioActivo != null)
            {
                FormularioActivo.Close();
            }
            FormularioActivo = formulario;
            formulario.TopLevel = false;
            formulario.FormBorderStyle = FormBorderStyle.None;
            //formulario.Dock = DockStyle.Fill; I COMMENTED IT, YOU NEED TO REMOVE IT
            formulario.BackColor = Color.PaleGreen;

           //SET THE AUTOSIZE in Main form and Container

                this.AutoSize = true;
                Contenedor.AutoSize = true;
                Contenedor.Controls.Add(formulario);
                formulario.Show();
            }

请注意:

如果上述解决方案不起作用是因为未提供公式代码。请随意分享。

相关问题