作为我的主要项目的一部分,我需要在多个显示器上显示一个简单的开/关开关,同时开关的状态必须同步,我可以单击其中一个进行切换。
参考这个问题,它通过拍摄“主”窗口的快照在“从”屏幕上显示窗口。这不是我的选择,因为我将无法在“从属”窗口上进行操作。
参考这个问题建议跨屏幕创建多个表单实例,它再次将无法同步按钮的状态。
似乎第二个示例更适用于我的要求,因为我唯一需要做的就是同步开/关开关的状态。但是,如果我是对的,我不知道如何在实例之间传递参数或如何引发事件并添加事件侦听器?
最后要注意的是,我需要它至少与 3 个显示器配合使用,所以该事件是否需要类似于多播?
更新:所有表格都在同一个应用程序中。更多细节:我有一个MainForm
显示大部分信息的显示器,并且需要所有显示器上的其他形式作为开关操作。交换机的状态将被发送回MainForm
所有 并同步SwitchForm
。
谢谢!
感谢@Zalomon 的建议。我终于找到了解决办法:
主窗体:
public partial class FormMain : Form {
public FormMain() {
InitializeComponent();
}
private void SwitchEventHandler(object sender, FormSwitch.SwitchEventArgs e) {
Debug.Print($"Event {((Form)sender).Bounds}");
}
private void button1_Click(object sender, EventArgs e) {
FormSwitch sw = new FormSwitch("1");
sw.Show();
FormSwitch sw2 = new FormSwitch("2");
sw2.Show();
sw.SwitchEvent += SwitchEventHandler;
sw.SwitchEvent += sw.SwitchEventHandler;
sw.SwitchEvent += sw2.SwitchEventHandler;
sw2.SwitchEvent += SwitchEventHandler;
sw2.SwitchEvent += sw.SwitchEventHandler;
sw2.SwitchEvent += sw2.SwitchEventHandler;
}
}
开关形式:
public partial class FormSwitch : Form {
public class SwitchEventArgs : EventArgs {
public bool Status { get; set; }
public SwitchEventArgs(bool status) { Status = status; }
}
public event EventHandler<SwitchEventArgs> SwitchEvent;
private bool _status;
private string _name;
public FormSwitch(string name) {
_name = name;
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
SwitchEvent(this, new SwitchEventArgs(!_status));
}
public void SwitchEventHandler(object sender, SwitchEventArgs e) {
_status = e.Status;
Debug.Print($"{_name}: {Bounds} {((Form)sender).Bounds} {_status}");
}
}
请让我知道您的想法 - 它有效,但如果我做错了什么?
如果公众可以接受,我会接受我自己的答案。
感谢@Zalomon,再次感谢!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句