加载表单后自定义光标消失/停止工作秒
Custom cursors vanish / stop working seconds after loading form
当鼠标悬停在我的项目的某个对象(.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 对象。这使句柄无效,光标变为 bye-bye。使用句柄属性不足以保持对象被引用,它是一个 IntPtr 而不是对象引用。
您需要自己使图标对象保持活动状态:
private Icon fooIcon = Properties.Resources.filename;
public form() {
InitializeComponent();
object.Cursor = new Cursor(fooIcon.Handle);
this.FormClosed += delegate { fooIcon.Dispose(); };
}
当鼠标悬停在我的项目的某个对象(.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 对象。这使句柄无效,光标变为 bye-bye。使用句柄属性不足以保持对象被引用,它是一个 IntPtr 而不是对象引用。
您需要自己使图标对象保持活动状态:
private Icon fooIcon = Properties.Resources.filename;
public form() {
InitializeComponent();
object.Cursor = new Cursor(fooIcon.Handle);
this.FormClosed += delegate { fooIcon.Dispose(); };
}