2011-09-04 134 views
98

我有一个模式对话框,需要隐藏关闭(X)按钮,但我不能使用 ControlBox = false,因为我需要保持最小化和最大化按钮。Windows窗体:如何隐藏关闭(x)按钮?

我需要隐藏只是关闭按钮,有没有办法做到这一点?

非常感谢!

更新:我有权限禁用它,这是更简单:)谢谢大家!

+0

你错了,我不希望禁用按钮的选项,但隐藏它..你能找到解决方案吗? –

+8

需要是一个强大的词汇。这个要求来自哪里?什么是实际要求 - 用户不能终止程序,或者UI“看起来没有关闭按钮”?因为还有其他的方法,你很难完全关闭它们(例如任务管理器,taskkill,可能是alt + f4等)。我个人不会在这方面努力工作,因为除非你重新剥皮你的整个应用程序,否则将浪费精力,打破用户对其他Windows程序的期望/连续性。 –

+4

@Sayem它揭示了这个页面,所以不要成为这样的评论家。 –

回答

110

您无法隐藏它,但可以通过重写窗体的CreateParams属性来禁用它。

private const int CP_NOCLOSE_BUTTON = 0x200; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams myCp = base.CreateParams; 
     myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ; 
     return myCp; 
    } 
} 

来源:http://www.codeproject.com/KB/cs/DisableClose.aspx

+0

谢谢,我发现这个解决方案,但我们想隐藏它,而不仅仅是禁用:(anywat谢谢! –

+3

除了从头开始设计你的表单, –

+0

是的。控制箱没有关闭按钮,然后隐藏父窗体的控制框 – Bahamut

25

嗯,你可以将其隐藏,通过移除整个系统菜单:

private const int WS_SYSMENU = 0x80000; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams cp = base.CreateParams; 
     cp.Style &= ~WS_SYSMENU; 
     return cp; 
    } 
} 

当然,这样做将删除最小化和最大化按钮。

如果您保留系统菜单但删除了关闭项目,则关闭按钮将保留但被禁用。

最后一种选择是自己绘制非客户区域。很难做到这一点。

+1

这也适用,gr吃!但* ControlBox = false *很容易使用。 – simmeone

+0

这与将ControlBox设置为false相同。此外,它不符合以下要求:_I需要保持最小化和最大化按钮_ – whiteshooz

7

如果您确实想要隐藏它,如“不可见”,那么您可能必须创建无边界窗体并自己绘制标题组件。 VisualStyles库有可用的Windows元素。您还必须重新添加重新调整表单或通过抓取标题栏来移动表单的功能。更不用说角落里的系统菜单了。

在大多数情况下,很难证明“关闭”按钮不可用,特别是当您需要使用最小化功能的模式窗体时。最小化模式形式确实没有意义。

106

我们可以通过设置this.ControlBox=false;

+23

您是否阅读过他指定的问题? – Servy

+21

做了Google搜索和这个SO QA是最受欢迎的。这个答案就是我一直在寻找的。谢谢Abhishek ... –

+11

隐藏所有这些尺寸按钮。不只是X. –

1

在你的窗体的属性隐藏窗体关闭按钮设置“控制盒” =假,但它会隐藏最小化和最大化为好。

2

那么你可以从属性部分或编程方式在构造函数中使用改变FormBorderStyle隐藏关闭按钮:

public Form1() 
{ 
InitializeComponent(); 
this.FormBorderStyle = FormBorderStyle.None; 
} 

然后创建一个菜单条项目退出应用程序。

欢呼

0

如果这是你可以设置

this.FormBorderStyle = FormBorderStyle.None; 

然后重新创建最小化和最大化按钮

private void button1_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Maximized; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Minimized; 
    } 
相关问题