首页 > 解决方案 > 如何让我的所有表单都发生 TopMost?

问题描述

我有一个东西,你点击“选项”,它会打开我想要的“选项”表单,所以当你启用“TopMost”时,它会发生在主表单而不是设置上,

        {
            if (bunifuiOSSwitch1.Value == true)
            {
                this.TopMost = true;
            }
            else
            {
                this.TopMost = false;
            }
        }

这就是我在按钮中的代码

标签: c#overlaytopmost

解决方案


this.TopMost将执行代码的当前表单(设置表单)设置为 TopMost,当您可能希望其他表单位于最顶层时。这意味着您的设置表单需要访问您想要位于最顶层的任何表单:

public class SettingsForm{

  private Form _mainForm;

  public SettingsForm(Form mainForm){  //settings form constructor takes mainform as a parameter
    _mainForm = mainForm;
  }

  void ApplySettingsButtonClick(...)
  {
    _mainForm.TopMost = bunifuiOSSwitch1.Value;
  }
}

然后打开您的设置表单,将主表单传递给:

void OpenSettingsButon_Click(...){
  new SettingsForm(this).ShowDialog();
}

或者您有一些共享的东西,两个表单都可以访问,例如设置机制,您的设置表单将在其中设置Properties.Default.Settings.MainfFOrmIsTopMost = true,然后您的主从可以对更改做出反应(可能通过事件处理程序)并根据设置设置 topmost 的值环境


不过要小心;在任何一种情况下,将主窗体设置在最上面都会使其位于设置窗口的顶部。如果设置窗口是一个对话框,它可能会卡在后面,除非它也是 TopMost。

如果可以的话,通常应该避免使用 TopMost。


推荐阅读