自定义光标在加载表单后几秒钟消失/停止工作

本文关键字:几秒 钟消失 消失 停止工作 光标 加载 表单 自定义 | 更新日期: 2023-09-27 18:30:57

当我的项目将鼠标悬停在某个对象(.ico文件而不是.cur)上时,我正在尝试使用自定义光标。当我加载时,它们可以正常工作并完美显示,但是在表单加载几秒钟后它们就会消失(或代码不起作用)!这些文件被设置为嵌入式资源,但我尝试了其他选项,它似乎没有区别。

Cursor foo = new Cursor(Properties.Resources.filename.Handle);
private void form_Load(object sender, EventArgs e)
{
    object.Cursor = foo;
}

即使我在鼠标悬停时更改光标,或者改用this.Cursor,也会发生这种情况。什么给?

自定义光标在加载表单后几秒钟消失/停止工作

您看到垃圾回收器正在完成其工作。 第一个 gen#0 垃圾回收将销毁 Properties.Resources.filename 返回的 Icon 对象。 这使句柄无效,光标再见。 使用 Handle 属性不足以保持对象的引用,它是一个 IntPtr 而不是对象引用。

您需要自己使 Icon 对象保持活动状态:

private Icon fooIcon = Properties.Resources.filename;
public form() {
    InitializeComponent();
    object.Cursor = new Cursor(fooIcon.Handle);
    this.FormClosed += delegate { fooIcon.Dispose(); };
}