Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Nombre del control (obtenerlo del contenedor)

157 views
Skip to first unread message

musi

unread,
Dec 29, 2008, 7:38:19 AM12/29/08
to
Hola a todos, soy nuevo en este foro.
Vengo de VB6 y estoy portando un control de usuario a vb.net. Lo que
estoy necesitando es saber como obtengo el nombre del control (tipo
MiControl1, MiControl2, etc) para que el mismo por defecto lo exiba
cuando es colocado en un contenedor. Con Me.Name ó MyBase.Name
solamente me devuelve 'MiControl'. En vb6 existía Extender para este
propósito, en vb.net no logro encontrar la solución. Saludos.

SoftJaén

unread,
Jan 2, 2009, 1:28:39 AM1/2/09
to
"musi" escribió:

> Vengo de VB6 y estoy portando un control de usuario a vb.net. Lo que
> estoy necesitando es saber como obtengo el nombre del control (tipo
> MiControl1, MiControl2, etc) para que el mismo por defecto lo exiba
> cuando es colocado en un contenedor.

Hola:

La verdad es que no entiendo muy bien para qué quieres obtener el nombre del
control que el usuario ha colocado sobre un formulario. Si es para lo que no
estás comentando, pienso que no se necesario.

Si tienes desarrollado un control de usuario que hereda de la clase
«System.Windows.Forms.UserControl», cuando el usuario lo coloque dentro de
un contenedor, como bien pudiera ser un formulario cualquiera,
automáticamente se le asignará un nombre por defecto, que será el nombre del
control terminado en un número.

Por ejemplo, si tu control de usuario se llama «MiControl», el primer
control que el usuario añada al formulario se llamará «MiControl1», el
segundo «MiControl2», y así sucesivamente, tal y como
ocurre con cualquier otro control que se añade a un formulario.

Un saludo y ¡Feliz Año Nuevo!

--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.

musi

unread,
Jan 2, 2009, 8:34:05 AM1/2/09
to
Busco que un control exiba por defecto su nombre, pero el nombre que
le asigna el contenedor que como tu bien dices Enrique, es el nombre
del control seguido de un número. En VB6 lo hacía mediante 'Extender'
que me posibilitaba recuperar el nombre que el contenedor le asigna al
control. No es un asunto demasiado importante, sino que simplemente
ayuda al programador que inserta varios controles en un contenedor,
saber el nombre del mismo sin tener que marcarlo y verlo en la ventana
propiedades. El control está compuesto de 2 TextBox y en VB lograba
que al crearse mostrara: MiControl1.Text y MiControl1.Title. Ahora en
vb.net no lo logro, se me ocurre que tal vez deba tratar de obtener el
nombre al final del proceso de creación y no al comienzo como lo hago
ahora. ¿Alguien sabe el orden en que se ejecutan los eventos de
creación de un control? me interesaría saber cual es el último.
Gracias.

SoftJaén

unread,
Jan 3, 2009, 4:55:07 AM1/3/09
to
"musi" escribió:

> Busco que un control exiba por defecto su nombre, pero el nombre que
> le asigna el contenedor que como tu bien dices Enrique, es el nombre
> del control seguido de un número. En VB6 lo hacía mediante 'Extender'
> que me posibilitaba recuperar el nombre que el contenedor le asigna al
> control. No es un asunto demasiado importante, sino que simplemente
> ayuda al programador que inserta varios controles en un contenedor,
> saber el nombre del mismo sin tener que marcarlo y verlo en la ventana
> propiedades.

Bueno, no sé yo que decirte, si ayuda mucho o poco al programador que
aparezca el nombre del control en su propiedad Text, de hecho, en las
últimas versiones de Visual Basic, ya no aparece el nombre del control en la
propiedad Text, al menos de los controles TextBox, cuestión ésta que
personalmente agradezco que así suceda.

No obstante, si tú deseas que aparezca el nombre por defecto del control de
usuario, en la propiedad Text de algún control TextBox de los existentes en
el control de usuario llamado «MiControl», simplemente tienes que efectuar
una llamada a la propiedad «Site» del control.

Por ejemplo, si solamente deseas que aparezca el nombre por defecto en la
propiedad Text de algún control TextBox, sin entrar en más detalles, en el
evento «Load» del control de usuario ejecutarías lo siguiente:

Private Sub MiControl_Load( ... )

' Sólo si estamos en modo de diseño
'
If Me.DesignMode Then
TextBox1.Text = Site.Name
End If

End Sub

Pero si también deseas que se modifique la propiedad Text del control
TextBox cuando el usuario modifique el nombre del control de usuario desde
la ventana Propiedades, entonces deberás ejecutar el siguiente código en el
componente «MiControl», código fuente que hay que agradecérselo a Eduardo A.
Morcillo:

Imports System.ComponentModel.Design

Public Class MiControl

Private Sub MiControl_Load( _
ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load

If Me.DesignMode Then
Dim ccs As IComponentChangeService = _
CType(Me.GetService( _
GetType(IComponentChangeService)), IComponentChangeService)

If Not ccs Is Nothing Then
AddHandler ccs.ComponentRename, AddressOf OnRename
End If

TextBox1.Text = Site.Name

End If

End Sub

Protected Sub OnRename( _
ByVal sender As Object, _
ByVal e As ComponentRenameEventArgs)

If e.Component Is Me Then
TextBox1.Text = e.NewName
End If

End Sub

End Class

musi

unread,
Jan 3, 2009, 8:57:37 AM1/3/09
to
Muchas gracias Enrique y también el agradecimiento a Eduardo Morcillo.
Funcionó perfectamente. Gracias también por la opinión sobre acerca
del TextBox que ahora aparece en blanco, yo también valoro que así
sea, sin embargo en el control que estoy programando todavía me
resulta de utilidad, ya que la programación del mismo se hace a través
de la ventana propiedades.
Saludos.
0 new messages