【问题标题】:How does the "x" button works and how can I override it?“x”按钮如何工作以及如何覆盖它?
【发布时间】:2014-06-10 00:52:12
【问题描述】:

首先我对 C#/Visual Studio/GUI 很陌生,所以我什至不能正确地问我的问题... - 窗口/窗体的“x”按钮叫什么? X 按钮? - 我可以隐藏它(但不是整个顶部栏)? - 我可以只隐藏几个顶部按钮,比如 X 和 _ 吗?

我的“testapp”中有以下内容

  • Form1 和 button1。
  • 带有标签和按钮 2 的 Form2。

Button1 在单击时检查是否已经存在 Form2 对象(使用 Application.OpenForms("Form2") 类似的东西)。
如果有,则显示并隐藏 form1。如果没有,则创建 1,显示并隐藏 form1。

Button2 被单击时,获取对 Form1 的引用(使用 Application.OpenForms("Form2") 类似的东西),显示它并隐藏 form2。

但如果用户使用“x”关闭 form2,我的应用程序将继续运行(因为 mainForm 仍在运行,但已隐藏)。 我想“覆盖 x 按钮”以使其显示 form1,然后隐藏/关闭 form2。

我该怎么做?

【问题讨论】:

标签: c# visual-studio-2013 controls overriding


【解决方案1】:

窗口的“x”按钮叫什么? X 按钮?

我通常称它为“关闭按钮”,但我不知道这是否(或者是否有)正式名称。

我可以隐藏它(但不能隐藏整个顶栏)吗?我可以只隐藏几个顶部按钮,例如 X 和 _ 吗?

AFAIK 您可以隐藏最小化和最大化按钮或所有按钮,但不能单独隐藏关闭按钮。您可以通过将表单的MaximizeBox 和/或MinimizeBox 属性设置为false 来隐藏其他两个或ControlBox 来隐藏所有这些。

但如果用户使用“x”关闭 form2,我的应用程序将继续运行(因为 mainForm 仍在运行,但已隐藏)。我想“覆盖 x 按钮”以使其显示 form1,然后隐藏/关闭 form2

您可以注册Closing 活动。在闭幕活动中,您可以再次显示form1

private void Form2_Closing(object sender, CancelEventArgs e) 
{
    e.Cancel = true;
    Hide();

    var form1 = FindForm1(); // here you can insert your logic to get form1
    form1 .Show();
}

【讨论】:

  • 我喜欢你建议注册 Closing 事件。但是,我应该把这段代码放在哪里?在我的 Form2 类中,对吧?
  • 在属性窗格的设计器中,您可以添加事件:msdn.microsoft.com/en-us/library/aa984320(v=vs.71).aspx
  • 工作就像一个魅力。完全达到了我想要的。谢谢!
【解决方案2】:

您不能直接覆盖“X”,但您可以处理窗口上的 Closing 事件。然后,如果您想隐藏它,但不关闭它,并显示另一个表单,请在事件处理程序中执行以下操作。

private void Form1_Closing(object sender, CancelEventArgs e) 
{
    if (stopClose) 
    {
         e.Cancel = true;
         Hide();

         myOtherForm.Show();
    }  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多