C# 如何更改标签的文本

本文关键字:文本 标签 何更改 | 更新日期: 2023-09-27 18:36:11

我有这个 C# 代码,我想更改名为 label1 的标签的文本。当我使用这些函数来检测按下的键并更改标签1时。函数内的文本,文本保持不变。如何更改标签1.此函数中的文本?

private void Form1_Load(object sender, EventArgs e)
{
    _hookID = SetHook(_proc);
    label1.Font = new Font("Arial", 24, FontStyle.Bold);
}
private static const int WH_KEYBOARD_LL = 13;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
    using (Process curProcess = Process.GetCurrentProcess())
    using (ProcessModule curModule = curProcess.MainModule)
    {
        return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
            GetModuleHandle(curModule.ModuleName), 0);
    }
}
private delegate IntPtr LowLevelKeyboardProc(
    int nCode, IntPtr wParam, IntPtr lParam);
private static IntPtr HookCallback(
    int nCode, IntPtr wParam, IntPtr lParam)
{
    if (nCode >= 0 && wParam == (IntPtr)WM_KEYUP)
    {
        int vkCode = Marshal.ReadInt32(lParam);
        Form1 f = new Form1();
        f.label1.Text = "Changed Label"; //<-------------------- change label here
    }
    return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook,
    LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
    IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);

C# 如何更改标签的文本

你有几个错误:

private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
private static IntPtr HookCallback(

您正在尝试在静态类方法中分配在运行时之前不存在的内容。这是行不通的;您需要执行以下操作:

private LowLevelKeyboardProc _proc;
private IntPtr _hookID;
private IntPtr HookCallback(...
private void Form1_Load(object sender, EventArgs e)
{
    _proc = new LowLevelKeyboardProc(HookCallback);
    _hookID = SetHook(_proc);

了解static的含义,除非绝对必要,否则不要使用它。它没有做你似乎认为它做的事情。

下一个:

Form1 f = new Form1();
f.label1.Text = "Changed Label"; 

您正在创建表单的全新副本,f更改副本内的标签,然后丢弃副本而不显示或对其执行任何操作。你想要这个:

label1.Text = "Changed Label";