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);
你有几个错误:
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";