c# - 在 C# WinForms 中,如何摆脱 child 的控制栏?

标签 c# winforms user-controls childwindow maximize

我正在重写一个最初用 FoxPro 编写的程序,供城镇和学校的税务人员使用。不幸的是,我正在学习这个。该程序要求窗口是模态的——用户遵循特定的路径,并且一次不能玩多个窗口。我有一个打开的 MDI 容器窗体。从那里调用所有子窗体。现在,我没有最大化子窗体,它看起来像这样:

enter image description here

您可以看到滚动条,因为它没有最大化。我真的不想让他们处理滚动条......所以我进入我的表单登录,子表单,并将 WindowState 设置为最大化。我明白了:

enter image description here

滚动条不见了,子窗口完全适合容器窗口,但顶部有两个控制条......主要的一个用于容器,第二个较小的用于子窗体,带有第二个有双重控制。我已尝试将 MaximizeBox、MinimizeBox、ShowIcon 和 ControlBox 设置为 false,并删除了子窗体的文本,但该栏仍然存在。如果我单击较小栏上的某些按钮,重复项就会消失。我正在寻找一种方法来摆脱第二个栏,或者隐藏它上面的控件......或者任何我没有想到的可以帮助的东西。

最佳答案

为什么不使用 UserControls 然后你可以从你的主窗体中添加/删除它们,它们不会有你使用 Mdi Forms 的开销。

一个简单粗暴的示例,您需要在 UserControl 上设置属性和事件以将数据传入和传出您的主窗体:

Form1

public partial class Form1 : Form
{
    UserControl1 login = new UserControl1();
    public Form1()
    {
        InitializeComponent();
        login.ExitEvent += new UserControl1.ExitEventHandler(login_ExitEvent);

    }

    void login_ExitEvent(object sender, EventArgs e)
    {
        panel1.Controls.Remove(login);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        panel1.Controls.Add(login);
        login.BringToFront();
    }
}

用户控件

public partial class UserControl1 : UserControl
{
    public delegate void ExitEventHandler(object sender, EventArgs e);
    public event ExitEventHandler ExitEvent; 

    public UserControl1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ExitEvent(this, new EventArgs());
    }
}

关于c# - 在 C# WinForms 中,如何摆脱 child 的控制栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934425/

相关文章:

C# 文档和未使用的 using(s)

c# - C# 中的 "Class"和 "Private Class"声明有什么区别?

c# - 加入用户控件的两个字符串属性(firstName + lastName)并将其分配给标签

wpf - mdi 应用程序会消亡吗?

c# - 将 UserControl 转换为特定类型的用户控件

c# - 如何让页面调用usercontrol

c# - 没有文件怎么玩?

c# - VSTS - 使用 API 获取所有项目的列表,而不仅仅是前 100 个

c# - C# 中的多线程与 Win.Forms 控件

asp.net - 在 ASP.NET 中,如何防止篡改隐藏字段值