【问题标题】:this.Hide() not working in new projects [duplicate]this.Hide() 在新项目中不起作用[重复]
【发布时间】:2014-05-26 09:16:21
【问题描述】:

当我需要时,我总是在Form1_Load(...) 中使用this.Hide,并且它一直有效。但是现在在一个新项目中,this.Hide 在任何地方都不起作用,这是我唯一的代码!

private void Form1_Load(object sender, EventArgs e)
{
    this.Visible = false;
    this.Hide();
}

为什么表单不隐藏?

【问题讨论】:

  • 真正的问题是:为什么要在展示的时候隐藏一些东西?臭味。如果您不打算展示表格,您当然不需要致电Show/ShowDialog
  • @Sinatr 不必多疑。它会阻止你看到真正的善意。
  • 善意的实现可能会很痛苦。我还是很好奇为什么要在Form1_Load(...)中隐藏表单。

标签: c# .net winforms


【解决方案1】:

来自here

private bool mShowAllowed;
protected override void SetVisibleCore(bool value)
{
    if (!mShowAllowed) value = false;
    {
        base.SetVisibleCore(value); 
    }
}

【讨论】:

    【解决方案2】:

    Load 事件还为时过早,无法隐藏 Form,因为那时它还没有显示。

    当覆盖 OnShown 方法时,它确实对我有用:

    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);
    
        this.Visible = false;
        this.Hide();
    }
    

    当然,也可以为Shown 事件创建一个处理程序。

    这两个电话中的任何一个都很好。两者都不需要。

    【讨论】:

    • 你甚至不需要重写 OnShown,只需将 this.Hide();在处理程序中!
    • 当然。我认为这是总体上更好的解决方案,这就是为什么我想再提供一个 POV。
    【解决方案3】:

    它不像你在负载中所说的那样工作。加载发生在实际可见之前,因此您也无法从那里隐藏它​​。

    另外你应该在询问之前搜索:

    why isn't this.Hide() working in Form1_load event?

    Hiding forms on startup: why doesn't this.Hide() hide my form?

    【讨论】:

    • +1 用于解释为什么它不能与 Load() 一起工作,而不是只提供一段代码。
    【解决方案4】:

    或者你可以简单地隐藏在Form1的Shown事件中:

    private void Form1_Shown(object sender, EventArgs e)
    {
        this.Hide();
    }
    

    【讨论】:

    • 是的,我知道我可以做到,但是如果你在 Shown 事件中隐藏它,90% 的时间你会看到表单在隐藏之前闪烁。很烦人。
    【解决方案5】:

    对我来说这是有效的。

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Opacity = 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-20
      • 2020-11-17
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多