Vaia mira yo lo habia entendido que pusieras el cursor que vs quisieras, entonces por eso lo diseñe asi, y cabal al intentar hacerlo como vs lo hacias daba problemas y todo, cabal cuando lo carga y eso pasa quizas porque todacia el archivo de recursos del control no se a cargado o a saber, por eso es que da ese problema justo la primera vez.
Pero bueno, me puse a pensar otra solucion, y pense que como tiene que ser
permanente el cursor, entonces lo podiamos de hacer de otra manera, y seria por medio de los eventos del control.
Vaia el evento que me interesa es el evento del
MouseEnter, entonces ese evento se ejecuta cuando el mouse se posicion encima de nuestro control, por tanto vamos a controlar este evento desde nuestro control, pero recorda de que la clase base del que nuestro control heredas las propiedades ya contiene un evento llamado
MouseEnter, entonces para no crear otro evento que haga eso para nuestra aplicacion, entonces lo vamos a
SOMBREAR y de esa manera vamos a poder utilizar el nombre MouseEnter, sin que el compilador nos de problemas.
Por tanto tenemos que agregar una linea de codigo de la siguiente manera al inicio y declarar el evento MouseEnter en nuestra aplcacion de la siguiente manera:
Shadows Event MouseEnter As EventHandler
No se si antes habias utilizado Shadows, pero con shadows hacemos que como que no se tome en cuenta ese evento en nuestra clase base o en otras palabras lo oculta. Bueno si necesitas mas info podes buscar en MSDN.
Despues de haber declarado el evento de esta manera (despues te explico porque lo hacemos asi), agregaremos una nuevas lineas en el contructor de nuestro control y declararemos una variable global de la siguiente manera:
Private intP As IntPtr
Public Sub New()
' Llamada necesaria para el Diseñador de Windows Forms.
InitializeComponent()
' Agregue cualquier inicialización después de la llamada a InitializeComponent().
intP = My.Resources.curDefault.GetHicon
End Sub
Entonces en la instancia de nuestro control, vamos a obtener el valor intPtr de la imagen que deseamos como cursor y por tanto la guardamos en la variable que dimensionamos global a nivel de nuestra clase.
Y ya por ultimo, si corrieras asi no mas, el evento de MouseEnter en tu control no funcionaria, porque nosotros lo hemos ocultado y por tanto el compilador no le haria caso aunq ocurriera, entonces nosotros antes de provocar el evento cuando nuestro control intercepte ese evento, tenemos que cambiar la imagen del mouse y despues provocar el evento de MouseEnter ya para nuestra aplicacion y eso lo hariamos de la siguiente manera agregando la linea de codigo siguiente:
Private Sub UserControl1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter
Me.Cursor = New Cursor(intP)
RaiseEvent MouseEnter(sender, e)
End Sub
OJO! Tene cuidado con el Handle, que el Handle que m interesa es el de mi clase base, porque si vs pusieras el de tu control (osea Me.MouseEnter) no te funcionaria, porque como lo estamos sobreescribiendo,
nunca ocurriria. Por tanto fijate que diga MyBase, osea interceptar el evento de nuestra clase base.
Una vez lo interceptamos cambiamos el cursor en ese momento de nuestro control, y cuando lo cambiamos, provocamos el evento de MouseEnter para nuestra aplicacion, (digamos queres hacer algo mas con ese evento, lo provocamos para que siempre este disponible en nuestra aplicacion).
Entonces al final resumiendo el nuevo codigo de tu control te quedaria asi:
Imports System
Imports System.ComponentModel
Public Class UserControl1
Shadows Event MouseEnter As EventHandler
Private intP As IntPtr
Public Sub New()
' Llamada necesaria para el Diseñador de Windows Forms.
InitializeComponent()
' Agregue cualquier inicialización después de la llamada a InitializeComponent().
intP = My.Resources.curDefault.GetHicon
End Sub
Overrides Property Cursor() As Cursor
Get
Return MyBase.Cursor
End Get
Set(ByVal value As Cursor)
MyBase.Cursor = value
TextBox1.Cursor = value
TextBox2.Cursor = value
End Set
End Property
Private Sub UserControl1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter
Me.Cursor = New Cursor(intP)
RaiseEvent MouseEnter(sender, e)
End Sub
End Class
Entonces ya cuando lo probes, vas a ver que va a funcionar correctamente y ya no te aparecera el mensaje de antes, porque el puntero del moouse lo cambiaria hasta que el mouse entre en tu control.
Espero que te sirva y hoy si era de esta manera, te dejo de nuevo el ejemplo ya modificado por si te sirve:
http://rapidshare.com/files/130530367/PruebaCursor.rar.htmlCualquier duda que no te salga me avisas o si no era asi tambien jajajaja !