在我的一个项目中,我在类I中编写了类似下面的代码,名为KeyboardHook ......
private static IntPtr keyboardHookId = IntPtr.Zero;
public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
//update UI here...
}
return CallNextHookEx(keyboardHookId, nCode, wParam, lParam);
}
我希望使用类似
的语句更新UI Form1.label1.Text = vkCode.ToString();
...但这会导致C#编译器出现问题;即访问非静态成员 我需要创建一个Form1对象的引用,即。
Application.Run(new Form1());
怎么办?
答案 0 :(得分:-2)
在SolutionExplorer中打开Program.cs并更改代码,如下所示
static class Program
{
public static Form1 mainForm = null;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
mainForm = new Form1();
Application.Run(mainForm);
}
}
这里是一个Form1类的实例,由 Application.Run 命令创建并启动。请注意,mainForm在第3行初始化为 null 而不是:
public static Form1 mainForm = new Form1();
这是因为必须在应用程序中创建第一个 IWin32Window 对象之前调用 Application.SetCompatibleTextRenderingDefault()方法,或者 InvalidOperationException 将被抛出。