You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForms 修改Cursor.Current鼠标指针后无法保持生效问题排查

问题根因

你直接修改System.Windows.Forms.Cursor.Current属于临时修改,该值无法持久保留的原因如下:

  • WinForms 中每个控件都有独立的Cursor属性,当鼠标悬浮在任意控件上方时,系统会自动将全局Cursor.Current替换为当前悬浮控件的Cursor属性值。你点击按钮后鼠标仍停在按钮控件上,按钮的默认Cursor为Cursors.Default,因此点击事件执行完成后,系统自动把光标切回了默认值。
  • Cursor.Current的修改默认仅在当前窗口消息的处理周期内有效,一旦当前事件(此处为按钮点击事件)处理完成,下一次UI消息触发时如果没有重新赋值,就会被控件自带的光标配置覆盖。

解决方案

如果要让光标修改在当前窗体内持久生效,直接修改窗体的Cursor属性即可,无需操作全局的Cursor.Current:

private bool ChangeMouse = true;

private void button1_Click(object sender, EventArgs e)
{
    Console.WriteLine("CURSOR-TOP: " + Cursor.Current.ToString());

    if (ChangeMouse)
    {
        ChangeMouse = false;
        this.Cursor = Cursors.Cross;
    }
    else
    {
        ChangeMouse = true;
        this.Cursor = Cursors.Default;
    }

    Console.WriteLine("CURSOR-BOTTOM: " + Cursor.Current.ToString());
    Console.WriteLine("");
}

如果需要让光标在整个应用的所有窗口都生效,可以给所有已打开的窗体统一设置Cursor属性,或者重写窗体的WndProc方法拦截WM_SETCURSOR消息,强制返回目标光标类型。

内容的提问来源于stack exchange,提问作者RickInWestPalmBeach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:36:03