【问题标题】:Keep all form always on top - Apply one setting to multiple forms将所有表单始终放在最前面 - 将一个设置应用于多个表单
【发布时间】:2020-12-22 20:36:54
【问题描述】:

我有多种形式。其中之一称为设置,并包含一个带有以下代码的复选框:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if (checkBox1.Checked)
    {
        this.TopMost = true;
    }
    else if (!checkBox1.Checked)
    {
        this.TopMost = false;
    }
}

现在,这仅在我使用“设置”表单时有效。一旦我打开另一个表格,例如程序表单(这会关闭设置表单)它不会停留在顶部。通过复选框 ApplicationSettings 属性,如果用户关闭并重新打开“设置”表单,我已经使该复选框保持选中/未选中状态。但这不会使始终在顶部的功能在其他表单上起作用。

选中设置表单中的复选框并关闭复选框表单后,如何使其他表单也保持在其他程序之上?

【问题讨论】:

  • 在每个表单加载/打开/创建时检查设置并采取相应措施?
  • 为您的项目创建一个 settings.setting 文件,并将选中的值保存在 bool 设置属性中。然后对于每个表单,您可以将 TopMost 属性绑定到该设置。您还可以将此逻辑放在基本表单中,其他表单从它派生。

标签: c# .net winforms


【解决方案1】:

在项目的设置文件中创建一个布尔属性,将复选框选中的属性保存到设置中。然后对于每个表单,您可以将TopMost 属性绑定到该设置。您还可以将绑定逻辑放在基本表单中,并从它派生其他表单。

示例

  1. 解决方案资源管理器 → 您的项目 → 属性节点 → 双击 Settings.settings

  2. 添加一个新属性,Name = TopMost 和 Type = bool 并将值设置为 false 并设置 Scope = User 并保存设置。

  3. 在负责编辑设置的表单中,在Load事件处理器中,从设置中读取CheckBoxChecked值,在保存按钮的Click事件处理器中,保存@ 987654334@进入设置属性:

     private void SettingForm_Load(object sender, EventArgs e)
     {
         topMostCheckBox.Checked = Properties.Settings.Default.TopMost;
     }
     private void SaveButton_Click(object sender, EventArgs e)
     {
         Properties.Settings.Default.TopMost = topMostCheckBox.Checked;
         Properties.Settings.Default.Save();
     }
    
  4. 在其他表单或基本表单中,使用设计器或使用代码将属性绑定设置为设置:

     private void BaseForm_Load(object sender, EventArgs e)
     {
         this.DataBindings.Add(new Binding("TopMost", Properties.Settings.Default, 
             "TopMost", true, DataSourceUpdateMode.OnPropertyChanged));
     } 
    

由于它是使用数据绑定设置的,一旦您保存设置,TopMost 将应用于从该基本表单派生的所有新的和打开的表单。

更多信息:

【讨论】:

    【解决方案2】:

    对于选中复选框后打开的新表单,您必须在初始化时从全局变量中设置TopMost

    如果您想在所有当前打开的表单上设置TopMost,您可以循环访问它们,如下所示:

      foreach (Form frm in Application.OpenForms)
          frm.TopMost = true;
    

    【讨论】:

    • 不是一个好主意。它不适用于您打开的新表单。
    • 我就是这么说的。对于新表单,您必须有一个全局变量。我看到你有一个很好的方法。
    【解决方案3】:

    如果您在设置表单中执行此操作,则仅针对设置表单运行。 去所有的形式 声明一个公共静态类

      public static class isTopMost
    {
        public static bool TopMost;
    }
    

    设置表单

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
            {
    isTopMost.TopMost=checkBox1.Checked;
    this.TopMost =  isTopMost.TopMost; // add this line all forms form_load events
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多