C# 访问OnFocusChanged()中的WinForm
我已经在Main()中创建了一个列表“exe”和新的WinForm。我需要在OnFocusChanged()中访问这两个文件。其思想是创建一个隐藏的WinForm,当“firefox”具有焦点时,WinForm将显示出来。我的WinForm有一个方法update(),用于显示WinForm。如果我在Main中调用“form.update()”,WinForm就会出现,但是我无法在OnFocusChanged()中访问它 如何访问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对象?谢谢
名称空间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
}