Autor Tema: vb.Net personalizar Control Personalizado XD  (Leído 32622 veces)

0 Usuarios y 6 Visitantes están viendo este tema.

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #15 : julio 16, 2008, 04:46:38 pm »
:thumbsup:  eres grande ednovi

gracias Juancho.... te has portado 10..... barbaroooooo....

tambien k+

me has sacado una spina que tenia desde ya hace rato.....
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #16 : julio 17, 2008, 04:34:14 pm »
je je


juancho, cuando use tu código funciono bien.... pero aún así no es lo que quiero, porque, pues tu creas una propiedad en tu control personalizado

Código: [Seleccionar]
Public Class UserControl1
    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
End Class

y un formulario aparte le pegas el puntero personalizado al control...... pero no es así la pila.... puesto que mi control estará en casi todo mi proyecto.... mi app no tiene un solo frm.... tonces, setear el puntero por cada control pierdo el objetivo.... yo quiero que mi control ya lleve el puntero nuevo... sé que todo fué por como explique las cosas....



ahora bien, si hago el cambio en tu ejemplo, para que el control ya lleve el puntero personalizado, de la siguiente manera...
Código: [Seleccionar]
Public Class UserControl1
    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_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim intP As IntPtr = My.Resources.Resource1.curNuevo.GetHicon
        Me.Cursor = New Cursor(intP)
    End Sub
End Class

claro, ya habiendo agregado el archivo Resource

y fuí al formulario donde esta el control y le dí clic al botón guardar, sabes que paso.....

 

me dió el mismo error..... klasdfñlasdkjfasñlfjksñdjlf XD



incluso si pongo el código en el evento New dá el mismo error
Código: [Seleccionar]
    Private Sub New()
        InitializeComponent()
        Dim intP As IntPtr = My.Resources.Resource1.curNuevo.GetHicon
        Me.Cursor = New Cursor(intP)
    End Sub

vlad ya probe quitandole el Me. y da el mismo problema..... justo cuando le doy guardar al proyecto y si tengo el formulario con mi control en frente, booom el mensaje shukino
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #17 : julio 17, 2008, 08:46:15 pm »
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
    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:

Código: [Seleccionar]
    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:
Código: [Seleccionar]
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.html

Cualquier duda que no te salga me avisas o si no era asi tambien jajajaja !  :big_boss:  :thumbsup:
<a href="http://www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/" target="_blank">
<img src="http://cache.www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/b_560x95.png" border="0" width="560" height="95" alt="" />
</a>

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #18 : julio 18, 2008, 09:24:10 am »
gracias por tu tiempo Juancho.....


siento que mi explicación inicial del problema ha creado otros problemas.... quizá si hubiese sido complemante claro desde un inicio tendría otros resultados.... todo ha sido mi culpa... lo siento mucho.....ahora te digo porque!


aqui ta una img de mi control:

son dos controles texBox los que ves ahí....yo quiero que al pasar el puntero por encima de cualquier textBox, es decir sobre mi control, el puntero del mouse cambie a uno completamente diferente a los que tiene windows, uno mio, pero, que yo no diga cual va ha ser.... mi control debe llevar ya su propio puntero.... y respetar cuando debe de aparecer...

mi control es asi tal y como esta en la img.... al control no le sobra espacio a ningún lado....

te podes imaginar cual es mi problema al ejecutar el código que me pusiste tal cual esta mi control?¿?¿?¿


.... el sub:
Código: [Seleccionar]
    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
jamás se ejecuta..... porque no hay espacio para MyBase.... en mi control no hay espacio.... para explicarte mejor hace lo siguiente en tu ejemplo...

recorta el espacio de tu control, de esta manera...

y pasa el puntero sobre el textBox de arriba o sobre el boton de abajo...,

que paso?¿, no te cambia el puntero.....

entonces, me vi obligado a escribir los siguientes sub
Código: [Seleccionar]
    Private Sub TextBox1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles textBox1.MouseEnter
        Me.Cursor = New Cursor(intP)
        RaiseEvent MouseEnter(sender, e)
    End Sub

    Private Sub TextBox2_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.MouseEnter
        Me.Cursor = New Cursor(intP)
        RaiseEvent MouseEnter(sender, e)
    End Sub
para que, al pasar el puntero por cualquiera de mis TexBox se cambie el cursor....

ahora pregunto, podré mejorar esto?¿
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #19 : julio 18, 2008, 10:29:10 am »
mmm si tenes razon, no m habias dicho que estaba todo pegado entonces vamos a ser una correcion en el codigo, y correctamente lo q has hecho esta bn, solo se te olvido implementar algo de las nuevas cosas en VS 2005 que son los Handles, entonces corrigiendo tu codigo y ocupando los handles me quedaria de la siguiente manera:

Código: [Seleccionar]
    Private Sub UserControl1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter, TextBox1.MouseEnter, TextBox2.MouseEnter
        Me.Cursor = Mycur
        RaiseEvent MouseEnter(sender, e)
    End Sub

En vez de crear tanto procedimiento para cada control, todos los pones en el mismo y asi te ahorras repetir codigo para objetos que hagan la misma accion.

Otro punto: Si te fijas modifiq la variable global intPtr y ahora en cambio mejor cree una variable del tipo cursor como global, para evitar de que cada vez que se ejecute el evento me instancie un nuevo tipo cursor, entonces mejor lo instanciamos en el procedimiento New del control y asi lo guardamos ahora en nuestra variable MyCur, te queda de la siguiente manera:

Código: [Seleccionar]
    Private Mycur As Cursor

    Public Sub New()
        ' Llamada necesaria para el Diseñador de Windows Forms.
        InitializeComponent()

        ' Agregue cualquier inicialización después de la llamada a InitializeComponent().
        Dim intP As IntPtr = My.Resources.curDefault.GetHicon
        Mycur = New Cursor(intP)
    End Sub

Entonces asi ya lo tenemos guardado nuestro cursor y solo lo estamos llamando para evitarnos el problema de que cada vez instanciemos una nueva variable, a la larga nos va a ir creando un nuevo espacio en memoria y hasta que cierre el programa se libera recorda o la otra forma es llamar al GarbageCollector, pero no te sale mas facil ocupar de la manera que te deje

Espero que hoy si te sirva, porque entendi que te habia funcionado el anterio con la correccion que vs le hicistes, entonces eso era lo unico! Espero que hoy si!  :thumbsup:
<a href="http://www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/" target="_blank">
<img src="http://cache.www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/b_560x95.png" border="0" width="560" height="95" alt="" />
</a>

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #20 : julio 18, 2008, 02:06:03 pm »
no sabía que se podía compartir los handles......  buen dato...

con lo demás esta todo solucionado.... :thx:
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
vb.Net personalizar Control Personalizado XD, PARTE 2
« Respuesta #21 : julio 23, 2008, 11:23:23 am »
ahora vengo con otra preguntita.....

esta vez es sobre otro control personalizado, pero aplica para todos mis controles....

el control que ahora traigo a cuenta es una caja de texto normal... aquí una img.... [daré todos los datos pa agilizar la respuesta XD]

es una caja de texto tal cual la img de arriba, el cuadrito gris de la derecha es parte de mi control....

bueno, resulta que mi caja de texto tiene funciones "públicas", es decir, que cuando pego mi caja de texto a un formulario, puedo escribir lo siguiente,

Código: [Seleccionar]
miCajaTexto.DoConsult
que es lo que quiero? je je je

....cuando en un formulario agregue mi caja de texto y cuando escriba el código anterior, me aparezca una descripción de lo que hace mi función.... he aquí una img de lo que quiero


la dizque flecha señala lo que quiero lograr....

supongan que en lugar de la función "ToString" sea mi función "DoConsult" tonces, quiero ponerle comentarios a mi función, tal cual esta en el cuadrito rojo de la img de anterior.....

me explico....
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #22 : julio 23, 2008, 11:33:48 am »
Eso es bien facil, eso e de un aplicacion de VS 2003 pero no me acuerdo el nombre, de alli en VS 2005 ya lo incluyeron y se puede para todas tus clases, propiedades, funciones, metodos y de todo. Lo unico que tenes que hacer es arriba de la funcion poner 3 comillas simples de la siguiente manera:

Código: [Seleccionar]
Private sub Prueba ()
end sub

Uno arriba siempre de cada funcion escribre "'''" y automaticamente el compiladr detecta y va agregar el codigo xml necesario te quedaria asi:

Código: [Seleccionar]
'''
Private sub Prueba ()
end sub

PD: No te pongo como queda, xq ahorita no estoy en visual pero solo ponele 3 comillas simples y automaticamente VS te pone lo necesario y vs solo rellenas!
<a href="http://www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/" target="_blank">
<img src="http://cache.www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/b_560x95.png" border="0" width="560" height="95" alt="" />
</a>

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #23 : julio 23, 2008, 11:52:06 am »
barbaro pajarito.....

ahí ta todo lo que necesito... hasta crea comentarios por cada variable que tenga el procedimiento, etc...

:thx:
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado JGuillen™

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3449
  • PHP,C#,MySQL,SQL
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #24 : julio 23, 2008, 11:57:18 am »
Eso es bien facil, eso e de un aplicacion de VS 2003 pero no me acuerdo el nombre, de alli en VS 2005 ya lo incluyeron y se puede para todas tus clases, propiedades, funciones, metodos y de todo. Lo unico que tenes que hacer es arriba de la funcion poner 3 comillas simples de la siguiente manera:

Código: [Seleccionar]
Private sub Prueba ()
end sub

Uno arriba siempre de cada funcion escribre "'''" y automaticamente el compiladr detecta y va agregar el codigo xml necesario te quedaria asi:

Código: [Seleccionar]
'''
Private sub Prueba ()
end sub

PD: No te pongo como queda, xq ahorita no estoy en visual pero solo ponele 3 comillas simples y automaticamente VS te pone lo necesario y vs solo rellenas!

y en C# como seria man?  :unsure:


Ya le haye.. sera  a si ///  que buen tips Juancho!  :thumbsup:
« Última Modificación: julio 23, 2008, 11:58:58 am por JGuillen™ »

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #25 : julio 23, 2008, 12:08:18 pm »
.Net es biiiien inteiligente...
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado Jonhyrey

  • Sv Full Member
  • *
  • Mensajes: 558
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #26 : julio 23, 2008, 03:29:43 pm »
Otro Tip!

Citar
<System.ComponentModel.Description("Obtiene o establece el nombre de .....")> _
    Public Property Nombre() as String

Esto le pone una descripcion en la caja de texto de las propiedades. Cuando es un control personalizado.



Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #27 : julio 23, 2008, 04:08:05 pm »
Otro Tip!
Código: [Seleccionar]
<System.ComponentModel.Description("Obtiene o establece el nombre de .....")> _
    Public Property Nombre() as String
Esto le pone una descripcion en la caja de texto de las propiedades. Cuando es un control personalizado.
simon, ese ya lo toy usando..... :)
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
vb.Net personalizar Control Personalizado XD PARTE 3
« Respuesta #28 : julio 26, 2008, 10:04:57 am »
je je je....

ahora lo que quiero hacer es habilitar/deshabilitar los atributos de "mis" propiedades en tiempo de ejecución...

algo asi como esto:

Código: [Seleccionar]
Dim instancia As New MiClase()
instancia.Properties.Attributes([ReadOnly]) =True

como se puede hacer, si es que lo permite .Net

todo porque he creado propiedades que dependen de otras.... tonces, quiero hacer que mi control no permita malas configuraciones.... y así me evito estar validando tanto a puro código.... ojala y me explique...
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: vb.Net personalizar Control Personalizado XD PARTE 3
« Respuesta #29 : julio 26, 2008, 10:38:38 am »
je je je....

ahora lo que quiero hacer es habilitar/deshabilitar los atributos de "mis" propiedades en tiempo de ejecución...

algo asi como esto:

Código: [Seleccionar]
Dim instancia As New MiClase()
instancia.Properties.Attributes([ReadOnly]) =True

como se puede hacer, si es que lo permite .Net

todo porque he creado propiedades que dependen de otras.... tonces, quiero hacer que mi control no permita malas configuraciones.... y así me evito estar validando tanto a puro código.... ojala y me explique...

Esto si no te entiendo vs, no entiendo lo queres hacer, noc si lo podes explicar un poquito mejor ya hasta con un ejemplo!
<a href="http://www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/" target="_blank">
<img src="http://cache.www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/b_560x95.png" border="0" width="560" height="95" alt="" />
</a>