Определите, открыта ли форма из другого проекта - PullRequest
2 голосов
/ 16 июля 2010

My c # WinForm решение содержит несколько проектов, включая проект Admin с несколькими формами и проект User с несколькими формами.Я хочу, чтобы мои пользовательские формы вели себя по-разному, когда открыты определенные формы администратора.

Как пользовательские формы могут узнать, когда открыты административные формы?

Все формы не имеют значения this.Text (все эти значения нулевые).

Когда яцикл по всем формам, идентифицированным 'FormCollection fc = Application.OpenForms', он не показывает формы из другого проекта;Кажется, он показывает только формы из одного проекта.

Кроме того, все формы администратора запускаются из одного файла .exe, а все пользовательские формы запускаются из другого файла .exe.

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 16 июля 2010

Используйте 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;
        }
    }
}
0 голосов
/ 16 июля 2010

Вам нужен способ межпроцессного взаимодействия.
Есть много способов добиться этого, большинство из них будет излишним для вашей ситуации.
Я считаю, что в вашем случае лучше всего иметь файлчто процесс администратора будет писать, а другие процессы будут считывать и выводить состояние процесса администратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...