所以在我的程序中我有一个设置页面。在设置页面上,有一个选项可以设置程序“Always on Top”。选中并取消选中此选项后,它会正确保存设置,但实际上并不会更改TopMost属性。
程序的主窗体称为“MainForm”,但设置页面称为“SettingsForm”。如何在“SettingsForm”中更改“MainForm”上的“TopMost”属性?
答案 0 :(得分:2)
您可以在“设置”表单上创建一个事件:
public event EventHandler TopMostEvent;
private void OnTopMostEvent()
{
if (TopMostEvent != null)
{
TopMostEvent(this, EventArgs.Empty);
}
}
在CheckedChanged
事件中,保存设置后调用方法:
OnTopMostEvent();
在Main表单中订阅该事件并设置表单TopMost属性
答案 1 :(得分:1)
一种方法是简单地向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
的诅咒,则可能没有必要这样做,但我无法告诉您的内容。)
答案 2 :(得分:1)
这是调解员模式的好地方。 (类似于控制器)这个想法是你有一个对象创建你的所有窗口并通过构造函数将引用传递给每个窗体。您可以从任一表单调用介体中的方法,并且介体将聚焦MainForm。这是Windows Forms中非常常见的做法。
所以你要做一个这样的中介课:
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;
}
}
public MyMediator()
{
mainForm = new MainForm(this);
mainForm.Show();
}
...
public FocusMainForm() // call this from settings form
{
mainForm.TopMost = true;
}
}