如何删除关闭按钮,但不删除其图标?

时间:2011-11-24 14:56:18

标签: c# winforms

我使用C#.net 4.0版本开发了一个Windows应用程序。

我需要从我的一个弹出窗口中删除关闭按钮。我可以通过将Control Box属性设置为false来实现。但在这种情况下,它也将删除我的图标。否则我可以禁用关闭按钮。但有没有办法只删除关闭按钮(保留图标)?

2 个答案:

答案 0 :(得分:5)

这是一个更清洁的解决方案: - )

Original post

winuser.h

public partial class Form1 : Form
{
    private const int CS_NOCLOSE = 0x200;
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams mdiCp = base.CreateParams;
            mdiCp.ClassStyle = mdiCp.ClassStyle | CS_NOCLOSE;

            return mdiCp;
        }
    }

    public Form1()
    {
        InitializeComponent();
    }

}

根据winuser.h中的常量,没有标志可以完全摆脱关闭的按钮。 (除非你想通过复制左边的一个部分找到一种画在按钮顶部的方法 - yuk。)

答案 1 :(得分:3)

此代码将禁用关闭按钮,但会显示图标。

在您的表单类中:

导入:

    using System.Runtime.InteropServices;

在主要课程中:

    const int MF_BYPOSITION = 0x400;

    [DllImport("User32")]
    private static extern int RemoveMenu(IntPtr hMenu, int nPosition, int wFlags);

    [DllImport("User32")]
    private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

    [DllImport("User32")]
    private static extern int GetMenuItemCount(IntPtr hWnd);

事件:

    private void Form1_Load(object sender, EventArgs e)
    {
        IntPtr hMenu = GetSystemMenu(this.Handle, false);
        int menuItemCount = GetMenuItemCount(hMenu);
        RemoveMenu(hMenu, menuItemCount - 1, MF_BYPOSITION);
    }