C# 访问OnFocusChanged()中的WinForm

C# 访问OnFocusChanged()中的WinForm,c#,.net,windows,winforms,C#,.net,Windows,Winforms,我已经在Main()中创建了一个列表“exe”和新的WinForm。我需要在OnFocusChanged()中访问这两个文件。其思想是创建一个隐藏的WinForm,当“firefox”具有焦点时,WinForm将显示出来。我的WinForm有一个方法update(),用于显示WinForm。如果我在Main中调用“form.update()”,WinForm就会出现,但是我无法在OnFocusChanged()中访问它 如何访问OnFocusChanged()中的列表和WinForm对象?谢谢

我已经在Main()中创建了一个列表“exe”和新的WinForm。我需要在OnFocusChanged()中访问这两个文件。其思想是创建一个隐藏的WinForm,当“firefox”具有焦点时,WinForm将显示出来。我的WinForm有一个方法update(),用于显示WinForm。如果我在Main中调用“form.update()”,WinForm就会出现,但是我无法在OnFocusChanged()中访问它

如何访问OnFocusChanged()中的列表和WinForm对象?谢谢

名称空间WinForm1
{
静态类程序
{
[状态线程]
静态void Main()
{
List exe=新列表();
Form1 form=新Form1();
申请表格;
}
静态私有void OnFocusChanged(对象发送方,自动FocusChangedEventArgs e)
{
string program=“firefox”;
if(exe.Any(program.Contains)
{
表格。更新(正确);
}
}
}
}

无法从OnFocusChanged事件处理程序访问
exe
,因为它在主方法的作用域中是本地的

您需要将列表变量设置为static,并将其置于方法之外

...
static List<string> exe = new List<string>();

[STAThread]
static void Main()
...
。。。
静态列表exe=新列表();
[状态线程]
静态void Main()
...

您可以使用System.Diagnostics.Process来存档此想法

首先获取所有进程的列表并检查进程名称

        Process[] processes = System.Diagnostics.Process.GetProcesses();

        if (processes.Any(c => c.ProcessName == "firefox"))
        {
           //your update code
        }

如何订阅它?我已将所有这些代码放在Program.cs中。您可以做同样的事情(使
表单
变量为静态)。如果表单本身引发OnFocusChanged事件,您可以从
sender
参数访问它。我这样做是否正确?我需要检测何时发生焦点事件,然后相应地更改WinForm的文本。您能否提供一个示例,说明如何对其进行编码?
        Process[] processes = System.Diagnostics.Process.GetProcesses();

        if (processes.Any(c => c.ProcessName == "firefox"))
        {
           //your update code
        }