0

我有一个类'App',它有一个'DeviceManager'类和一个存储为字段的Windows窗体'MainForm'的实例。MainForm 通过单击系统托盘图标可见。DeviceManager 有 Docked 和 Undoked 方法,其中 Docked 启动同步操作。只有在 MainForm 不可见时,Docked 方法才应该开始操作。

DeviceManager 无权访问 App 的成员,因此它不能使用 App 对 MainForm 的引用来检查表单的状态。让 App 将自身传递到 DeviceManager 的构造函数中,当 DeviceManager 没有其他需要此类引用时(MainForm 和 DeviceManager 迄今为止彼此不知道),这似乎是很多耦合。

我现在正在考虑让 App.IsUserActive 属性的设置器引发一个事件,DeviceManager 可以使用该事件来维护自己的“IsUserActive”字段。

我还有其他方法可以研究吗?

编辑:添加代码来说明:

internal class App
{
    private DeviceManager _deviceMgr;
    private MainForm _mainForm;

    internal App()
    {
        _deviceMgr = new DeviceManager();
        _mainForm = new MainForm { Visible = false };
    }
}

internal class DeviceManager
{
    private void Docked()
    {
        if (!_mainForm.Visible) //can't see MainForm or App from here
        {
            Connect();
            StartSynchronization();  
        }
    }

    private void Undocked()
    {
        Disconnect();
    }
}
4

1 回答 1

0

您可以使用的表格有一个全局参考。这是一个简单的例子:

//Inside of DeviceManager class
private bool CheckFormVisibility<TForm>() where TForm : Form
{
    TForm form = System.Windows.Forms.Application.OpenForms.OfType<TForm>().SingleOrDefault();
    return form != null && form.Visible;
}

然后调用CheckFormVisibility<MyForm>()或删除泛型并专门用于您的MyForm.

**我在这里假设您将只有零/一个表单实例。

于 2013-03-13T15:08:09.787 回答