【问题标题】:Change TopMost property on a DIFFERENT form?更改不同表单上的 TopMost 属性?
【发布时间】:2012-03-29 16:16:22
【问题描述】:

所以在我的程序中,我有一个设置页面。在设置页面上,有一个选项可以设置程序“始终在最前面”。当检查此选项并未选中此选项时,它可以正确保存设置,但实际上并未更改最上方的属性。

程序的主窗体叫做“MainForm”,而设置页面叫做“SettingsForm”。如何从“SettingsForm”中更改“MainForm”上的“TopMost”属性?

【问题讨论】:

  • 向我们展示您目前正在尝试如何做到这一点。
  • 我目前还没有“尝试”这样做……我不知道该怎么做。

标签: c#


【解决方案1】:

您可以在设置表单上创建一个事件:

public event EventHandler TopMostEvent;

private void OnTopMostEvent()
{
    if (TopMostEvent != null)
    {
       TopMostEvent(this, EventArgs.Empty);
    }
}

CheckedChanged事件保存设置后调用方法:

 OnTopMostEvent();

并在主窗体中订阅事件并设置窗体 TopMost 属性

【讨论】:

    【解决方案2】:

    一种方法是简单地为SettingForm 提供对MainForm 的引用,例如通过构造函数参数,然后将其存储到一个字段中,以后可以在必要时访问它。

    例如:

    public class SettingsForm
    {
        public SettingsForm(MainForm mainForm)
        {
            this.mainForm = mainForm;
        }
    
        public void Apple()
        {
            this.mainForm.TopMost = true;
        }
    
        private readonly MainForm mainForm;
    }
    
    public class MainForm
    {
        public void Banana()
        {
            var settingsForm = new SettingsForm(this);
            settingsForm.ShowDialog();
        }
    }
    

    (但是,如果SettingsForm 的所有者已经是MainForm 的实例,则可能没有必要这样做,但是从您给出的内容中我无法判断。)

    【讨论】:

    • @JasonAxelrod:我添加了一个示例。
    • 我试过这个...得到以下错误:System.NullReferenceException:对象引用未设置为对象的实例
    【解决方案3】:

    这是一个中介模式的好地方。 (类似于控制器)这个想法是您有一个对象来创建所有窗口并通过构造函数将对自身的引用传递给每个表单。您可以从任一表单调用调解器中的方法,调解器将聚焦 MainForm。这是 Windows 窗体中非常常见的做法。

    所以你会像这样创建一个中介类:

    public class MyMediator { Form mainForm {get;set;} Form settingsForm{get;set;}

        public MyMediator()
        {
            mainForm = new MainForm(this);
            mainForm.Show();
        }
    
        ...
    
        public FocusMainForm() // call this from settings form
        {
            mainForm.TopMost = true;
        }
    
    
    }
    

    【讨论】:

    • 我不知道你刚才说了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多