确定另一个项目中的表单是否已打开

时间:2010-07-16 14:04:54

标签: c# winforms project

我的c#WinForm解决方案包含多个项目,包括具有多个表单的Admin项目和具有多个表单的User项目。我希望我的用户表单在特定管理表单打开时的行为方式不同。

用户表单如何在管理表单打开时告知?

所有表单都没有'this.Text'值(所有这些值都为null)。

当我遍历由'FormCollection fc = Application.OpenForms'标识的所有表单时,它不显示来自另一个项目的表单;它似乎只显示来自同一项目的表格。

此外,所有管理表单都从一个.exe文件运行,所有用户表单从另一个.exe文件运行。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

对该范围使用Mutex类 Mutex是一个Windows内核对象,具有Windows计算机的唯一标识符。

public class Form2 : Form
{
    Mutex m;
    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);
        m = new Mutex(true, "Form2");
    }

    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        m.ReleaseMutex();
    }
}

public class Form3 : Form
{
    bool form2IsOpen;
    public Form3()
    {
        try
        {
            Mutex.OpenExisting("Form2");
            form2IsOpen = true;
        }
        catch (WaitHandleCannotBeOpenedException ex)
        {
            form2IsOpen = false;
        }
    }
}

答案 1 :(得分:0)

您需要的是一种进程间通信方式 有很多方法可以实现这一点,大多数情况都会因你的情况而过度 我最好的方法是你的情况是拥有一个管理进程将写入的文件,其他进程将读取并推断管理进程的状态。