我的c#WinForm解决方案包含多个项目,包括具有多个表单的Admin项目和具有多个表单的User项目。我希望我的用户表单在特定管理表单打开时的行为方式不同。
用户表单如何在管理表单打开时告知?
所有表单都没有'this.Text'值(所有这些值都为null)。
当我遍历由'FormCollection fc = Application.OpenForms'标识的所有表单时,它不显示来自另一个项目的表单;它似乎只显示来自同一项目的表格。
此外,所有管理表单都从一个.exe文件运行,所有用户表单从另一个.exe文件运行。
感谢任何帮助。
答案 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)
您需要的是一种进程间通信方式 有很多方法可以实现这一点,大多数情况都会因你的情况而过度 我最好的方法是你的情况是拥有一个管理进程将写入的文件,其他进程将读取并推断管理进程的状态。