Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从静态方法使用窗体/控件时访问非静态成员错误_C#_.net_Winforms_Visual Studio_Static - Fatal编程技术网

C# 从静态方法使用窗体/控件时访问非静态成员错误

C# 从静态方法使用窗体/控件时访问非静态成员错误,c#,.net,winforms,visual-studio,static,C#,.net,Winforms,Visual Studio,Static,在我的一个项目中,我在一个名为KeyboardHook的类中编写了如下代码 private static IntPtr keyboardHookId = IntPtr.Zero; public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)

在我的一个项目中,我在一个名为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());

怎么办?

在SolutionExplorer的open 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);
    }
}

这是因为在应用程序中创建第一个IWin32Window对象之前必须调用应用程序.SetCompatibleTextRenderingDefault()方法,否则将引发无效操作异常。

为什么不将函数设为非静态的
函数?这似乎是一个实例方法,而不是静态的。
public static Form1 mainForm = new Form1();