Autor Tema: vb.Net personalizar Control Personalizado XD  (Leído 32628 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
vb.Net personalizar Control Personalizado XD
« : julio 15, 2008, 03:56:59 pm »
2 grandes temas.....

1- Colocarle un puntero especial.

Resulta que he creado un User Control en vb.Net [un control personalizado]; y quiero que cuando se le pasa el puntero por encima tenga un cursor diferente a los comunes de windows,

por ejemplo un cursor de los que estan aquí:






Ya encontre cierto código en Internet y me funciona bien, pues me cambia el puntero.... Pero cuando agrego mi control a un proyecto y le doy guardar me aparece un mensaje... Repito, el puntero lo cambia y todo bien.... pero me da grima ese mensaje que me aparece siempre que le doy guardar...

aqui ta el mensaje.... me guarda los cambios que he echo pero siempre sale la siguiente pantalla





2- Agrupar propiedades....
el pique esta así.... tengo dos propiedades en mi control.... una es por así decirlo, madre de la otra.... Han visto en .Net al propiedad DataBindings, que tiene un signo más(+) al lado izquierdo y al darle clic al signo se despliegan más propiedades....eso es lo que quiero hacer....

una img de ejemplo...


son solo cosillas, quizá triviales para algunos, pero creo que a mis controles solo eso les falta  :p
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 #1 : julio 15, 2008, 04:08:07 pm »
con respecto a la pregunta 2... que control estas usando para agrupar esas propiedades en tu control?  :big_boss:

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 #2 : julio 15, 2008, 04:45:25 pm »
Explicación de la pregunta 2

mi control es una caja de texto.....

mi control tiene una propiedad llamada FocusColor que devuelve un valor tipo "color" que tiene, valga la redundancia, el color de la caja de texto cuando tenga el foco....

pero hay una propiedad llamada ColoringOnFocused tipo boolean, que determina si se cambiara el BackColor de la caja de texto cuando tenga el foco....


estas son propiedades creadas por mis huesos


en otras palabras, la propiedad ColoringOnFocused es mamá de la propiedad FocusColor y quiero que en la paleta de propiedades esten agrupadas por la propiedad ColoringOnFocused, me explico....


aquí una img de mi control, con las propiedades ya funcionando...claro sin estar agrupadas


quiero que a la izquierda de ColoringOnFocused este el signo mas (+) que espliegue la propiedad FocusColor agrupadas..... me explico


vuelvo y repito, si te parecen triviales estas preguntas abstenerse de comentarios personales y fuera de lugar....

mi objetivo es darle un grado mas profesional a mis controles personalizados....

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

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #3 : julio 16, 2008, 05:43:17 am »
Para el primer error se me hace que la propiedad "cursor" esta mal definida, esperando un tipo muy diferente al que le estas suministrando.

Podemos ver la pagina o algo de donde tomaste el codigo para lo del cursor?, o el fragmento del codigo de que maneja el cambio de la propiedad "Cursor" y la parte en tu programa que la usa?.

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 #4 : julio 16, 2008, 10:43:01 am »
Para el primer error se me hace que la propiedad "cursor" esta mal definida, esperando un tipo muy diferente al que le estas suministrando......

tenés toda la razón, a la misma conclusión llegue, pero lo que me detiene es el echo que mi código es funcional más no es perfecto..... es decir, en tiempo de ejecución al pasar el puntero sobre mi control hace el cambio del cursor....


desde un inicio se me ocurrió poner el código de mi control en el primer post...... pero vi más ganancioso pedirles como hacer el cambio de puntero.... pa no complicar tanto las cosas.... pero ya que me lo solicitas, aquí ta:

1- a mi control le he agrega un archivo .ico, que es el cursor..... se muy bien que los punteros tiene extensión .cur/.ani.... pero mi código no me furulaba con esa extensión.... entonces me vi obligado a cambiar la extensión del archivo a .ico...... en la propiedad de Acción a Generar tiene Recurso Incrustado[vs05]

2- el código esta en el load de mi control....
Código: [Seleccionar]
        Dim CurrentAssembly As String = Reflection.Assembly.GetExecutingAssembly().GetName().Name.ToString()
        Dim cursorFile As IO.Stream

        cursorFile = Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(CurrentAssembly +".nombre_de_mi_cursor.ico")

        Me.Cursor = New Cursor(cursorFile)

y eso es todo.... el cursor me lo cambia.... agrego mi control .dll a un proyecto diferente, ejecuto el formulario y al pasar el puntero sobre mi control se cambia el cursor.... pero cuando al proyecto donde he pegado mi control le doy guardar y si tengo en frente el formulario donde esta mi control aparece el siguiente mensaje...


creo que he mencionado algo importante y que se me olvidaba.....  :D je je... ese mensaje solo aparece si tengo en pantalla el formulario donde esta mi control.... si tengo otros o ninguno y le doy guardar ese mensaje no aparece .....
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #5 : julio 16, 2008, 10:55:50 am »
y si usas Cursor.Current en lugar de Me.Cursor?

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #6 : julio 16, 2008, 10:58:00 am »
2- Agrupar propiedades....
el pique esta así.... tengo dos propiedades en mi control.... una es por así decirlo, madre de la otra.... Han visto en .Net al propiedad DataBindings, que tiene un signo más(+) al lado izquierdo y al darle clic al signo se despliegan más propiedades....eso es lo que quiero hacer....

una img de ejemplo...


son solo cosillas, quizá triviales para algunos, pero creo que a mis controles solo eso les falta  :p

Esto de agrupar propiedades lo hace automaticamente VS! Pero para lograrlo hay que ocupar las cositas que se ponen en < > (se me a olvidado de los nombres de estas cosas  :D) que los pones arriba de una funcion ya se para agregarle propiedades o comportamiento en el entorno de diseño!

Dejame buscarlo que yo hic un ejemplo asi y te mando la explicacion! Que debo de tener un codigo dond ocupe eso! Ya lo explico!


MODIFICADO:    Creo q se llaman atributos pero que alguien m corija si no se llaman asi!  :D x_x


MODIFICADO NUEVAMENTE, Hoy si aqui te dejo, ya lo encontre vs:
RESPUESTA A LA SEGUNDA PREGUNTA

Vaia hoy si ya encontre el ejemplo del programa que hice, jejeje y esta facil y es como te mencione anteriormente, entonces para hacer ese efecto tenes que crear una clase o una estructura que contenga los campos que queres que aparezcan agrupados!

En mi ejemplo era para generar fondos degradados, por tanto agrupaba los campos del color 1, color 2 y si dado caso utilizaban la transparencia por tanto mi clase la llame 'COLORDEGRADADO' el cual incluye 2 propiedades basicas y son las que nos interesan entonces me quedaba declarada asi:

<TypeConverterAttribute(GetType(ExpandableObjectConverter))> _
Public Class ColorDegradado
    Private mAlpha As Integer = 255
    Private mColor As Color = Color.White

    <Description("Especifica el color que tomara")> _
    Property Color() As Color
    End Property

    <Description("El nivel de transparencia que posee el color. 0 es completament transparente y 255 completamente opaco")> _
    Property Transparencia() As Integer
    End Property
End Class

Esa seria mi clase para que los datos que m interesen esten agrupadon en una clase, y tenes que ponerle el atributo que te mencione arriba que es el TYPECONVERTERATTRIBUTE, para que eso se pueda convertir en un tipo expandible.

Una vez tengamos ya creado nuestra clase pasamos al codigo de nuestro control personalizado, entonces alli vas escribir lo siguiente, bueno en mi ejemplo lo hic de la manera siguiente:

Creo la propiedad en mi caso llamada BackColor1 y me quedo asi:

    Private BKColor1 As New ColorDegradado
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _
     Category("Apariencia")> _
    Public Property BKColorDegradado1() As ColorDegradado
        Get
            Return BKColor1
        End Get
        Set(ByVal value As ColorDegradado)
            BKColor1 = value
        End Set
    End Property

Vaia si te fijas esta vez agrege 2 atributos:
 1 - DesignerSerializationVisibility este atributo se mal no recuerdo es el que hace que en tiempo diseño muestre el contenido del tipo que fue declarado, en otras palabras, que agarre los campos que contenga la clase que creamos anteriormente.

 2 - Category (Esta noc si ya te la podias), esta es para agruparla a una categoria ya existente o creamos una nueva a la hora de visulalizar las propiedades de nuestro control en Vista por CATEGORIA!


Una vez allas adaptado mi codigo a lo que deseas hacer, te debe de salir y te dejo una imagen de como te queda que es lo que querias lograr:



Espero que te sirva y cualquier duda me preguntas de algo que no te salga o no entendistes.

PD: Importaciones que debes de hacer son:
  - Imports System.ComponentModel
  - Imports System.ComponentModel.Design

Creo que solo esas son! Espero que te sirvar!   :big_boss:  :thumbsup:

PD 2: Si algunas cosas no las explique bn como los atributos que ocupe, podes buscar mas ayuda en el MSDN, para que entendas mejor la explicacion de esos atributos! Es que el año pasaod hic eso y algunas cosas no m acuerdo muy bn jejejeje!
« Última Modificación: julio 16, 2008, 11:34:02 am por Juancho »
<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 #7 : julio 16, 2008, 12:48:49 pm »
barbaro pajarito......


juancho, desde hace rato toy viendo que andas en algo con .Net.... sos la leche papa..... :)

el atributo Category y Description ya me lo podía los demas no... gracias



y con la pregunta 1 que ondas.... ya le has puesto cursor personalizado a algún control?¿?¿
« Última Modificación: julio 16, 2008, 12:51:34 pm por tekun »
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #8 : julio 16, 2008, 01:15:18 pm »
y si usas Cursor.Current en lugar de Me.Cursor?
No me gusta ser persistente, pero lo dije en base a esto:
http://bytes.com/forum/thread463398.html

Citar
VB allows you to access a shared method with an instance - in your example
"Me" is the instance. The "Cursor" property is a shared property however, so
there's no need to use an instance - just use the class. VS is simply
informing you that the "Me" will not be evaluated - useless message in this
case, but if your instance term was more complicated then it could be
informative.
Citar
Since Current is a shared property of the Cursor class, you just need to use
Cursor.Current instead of your form's instance of the Cursor class.

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 #9 : julio 16, 2008, 02:11:04 pm »
siento no haber respondido antes vlad, pero no había probado....  :phew:


y si usas Cursor.Current en lugar de Me.Cursor?

no me hace ningún cambio.....


otra dato, es que en mi control personalizado hay controles insertados, mi control tiene dos texBox.... tonces también tengo esto..
   
Código: [Seleccionar]
    Me.txtCodigo.Cursor = Me.Cursor
    Me.txtDescripcion.Cursor = Me.Cursor
Cursor es la variable que declare antes..... y solo dejando cursor.current=Me.Cursor no me hace nada....
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 #10 : julio 16, 2008, 02:12:55 pm »
Vaia mira, estadop viendo pero no entiendo bn tu pregunta? Dejame ver, queres un control personalizado que cuando pase le mouse me cambie de cursor verdad?? Tanto para todos los objetos que este posea adentro verdad? Y no es de los cursores que trae por defecto windows verdad? asi es??
<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 #11 : julio 16, 2008, 02:18:47 pm »
Código: [Seleccionar]
update preguntas
set respuesta='SI'
where user='Juancho'

asdkfjasdklfjasdlñfsjñflajf XD
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #12 : julio 16, 2008, 03:37:46 pm »
no me hace ningún cambio.....
otra dato, es que en mi control personalizado hay controles insertados, mi control tiene dos texBox.... tonces también tengo esto..
   
Código: [Seleccionar]
    Me.txtCodigo.Cursor = Me.Cursor
    Me.txtDescripcion.Cursor = Me.Cursor
Cursor es la variable que declare antes..... y solo dejando cursor.current=Me.Cursor no me hace nada....

Me pregunto... y si porque no mejor usas Cursor sin el Me?

Mas o menos asi:

   
Código: [Seleccionar]
Dim cursorFile As IO.Stream
cursorFile = Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(CurrentAssembly +".nombre_de_mi_cursor.ico")

Cursor = New Cursor(cursorFile)

................

Me.txtCodigo.Cursor = Cursor
Me.txtDescripcion.Cursor = Cursor

Acabo de probar (VS03) y tal parece eso te lo esta dando porque no se espera la instancia "Me" de la clase Cursor, sino la global "Cursor".

En resumen proba quitando "Me", que para mi seria el hInstance problematico.

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #13 : julio 16, 2008, 03:47:58 pm »
RESPUESTA A PREGUNTA UNO

Vaia, esto si nunk habia hecho pero como ahorita estoy de vaca de la u y no tengo nada que hacer me puse a leer un poco de como se hacia. Me acuerdo que en VB6, era bn facil, porque en la propiedad MousePointer ponia 'Custom' y de alli en MouseIcon ponia el icono que queria, pero bueno ahora en el VS 2005 cambia un poco.

Bueno para empezar hice yo mi propio ejemplo y al final te lo anexo.

En la parte del control personalizado yo 'sobreescribi' la propiedad cursor ya que como los controles personalizados heredan propiedades de la clase base 'Control', entonces hice mi propia propiedad para que cuando en mi aplicacion yo le cambie el valor a la propiedad cursor de mi control personalizado, entonces este automaticamente se lo cambie a los q contengan andetro este (que yo sepa la mayoria de controles heredan el cursor que se establece en dond se encuentre contenidos osea su PARENT, significa que si yo le cambio a mi control personaliado la propiedad cursor, todos los elementos contendidos en el tambn la van a cambiar, aunq en los TextBox NO, porque como si ven ellos tiene su propio cambio que muestra el cursor, por eso, bueno creo que solo en ellos pasa eso aunq no estoy seguro), por eso en mi codigo de ejemplo solo a los textbox le cambie el icono.

Mi propiedad cursor en mi control personalizado queda 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
End Class

Bueno, esta es la unica modificacion que le hago a mi control personalizado. Despues me voy a la aplicacion donde ocupo mi control y bueno encontre 2 formas de hacer esto:

1 - Esta forma es la que ofrece MSDN para un cursor personalizado, que es crear un archivo de cursor y despues incrustarlo en los archivos de recurso de nuestra aplicacion por medio de la linea de comandos al inicio de nuestra app. Te dejo el link de MSDN por si lo queres revisar http://msdn.microsoft.com/es-es/library/system.windows.forms.cursor.aspx  PD. A mi no me parecio este metodo lo vi un poco complicado y no debia de ser asi.

2- Segui buscando y encontre el segundo que en el mismo articulo anteriormente citado esta de que es cargar el cursor desde una ubicacion en nuestro disco duro, para esto unicamente dimensionabas una variable del tipo cursor y cargabas la imagen de la siguiente manera:

Código: [Seleccionar]
Dim cur as new Cursor("C:\micursor.cur")
usercontrol1.cursor = cur

Y de esa manera lo cambia automaticamente el cursor y tambien todos los controles que contenga este.

Pero me invente una tercera forma:
Partiendo de la segunda forma, para evitarse estar poniendo las direcciones de las imagenes y todo lo demas, vi que me salia mas facil ocupar el Resource de mi aplicacion. (Creo que deberias de estar ocupando el control de recursos en tu aplicacion por tanto no me voy a meter mucho en la explicacion de esto).

Entonces, para no agregar solo archivos del tipo '*.cur' lo podemos hacer por este metodo:

1 - Incrusta la imagen al archivo de recursos de tu aplicacion. Si queres ocupar el que te crea por defecto el VS o crea un nuevo archivo de recursos es independiente.

2- Una vez tengas la imagen, para poderla utilizar como cursor vamos hacer un truco (jejejeje, me acorde que para el tratado de imagenes se ocupa esta conversion), te queda asi:

Código: [Seleccionar]
        Dim intP As IntPtr = My.Resources.Resource1.curAgregar.GetHicon
Entonces instancian un tipo IntPtr que es un achivo de posicion o de cursor para windows y como la imagen yo la habia agregado a mi archivo de recursos (por cierto esta se llama 'curAgregar'), entonces los tipo Bitmaps, tiene una funcion que convierte el Bitmap en IntPtr y esta funcion se llama GetHIcon

utilizando eso te queda el codigo de la siguiente manera:

Código: [Seleccionar]
        Dim intP As IntPtr = My.Resources.Resource1.curAgregar.GetHicon
        UserControl11.Cursor = New Cursor(intP)

Y si lo probas, lo podes hacer con cualquier imagen que desees, y lo unico que tenes que hacer es establecer correctamente el tamaño de la imagen para que el icono no te salga my grande como en mi caso, jajaja, te dejo el codigo ejemplo y cualquier duda me avisas.

Creo que esto es lo que no sabias, bueno eso entendi yo de la pregunta. Te dejo el codigo que hic talvez te sirva para ver como funciona: http://rapidshare.com/files/130224933/PruebaCursor.rar.html



<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 vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: vb.Net personalizar Control Personalizado XD
« Respuesta #14 : julio 16, 2008, 03:53:43 pm »
 :offtopic:

 :shock:.... no soy el del problema pero te voy a poner K+ por ese empeño que le pones Juancho!