Referenciar el control por el form.. al estilo this

28/05/2008 - 12:56 por Juanato | Informe spam
Hola a todos:

No consigo referenciar al control cuando estoy en un evento de él,
porque this solo me sirve para el form al que pertenece pensaba
que this va anidando la posición hasta definir al objeto del form
activo sobre el que se está operando alguien me puede ayudar ?

Preguntas similare

Leer las respuestas

#1 Juanato
28/05/2008 - 13:13 | Informe spam
On 28 mayo, 12:59, Alfredo Novoa wrote:
Hola Juanato,

El Wed, 28 May 2008 03:56:27 -0700 (PDT), Juanato escribió:

> No consigo referenciar al control cuando estoy en un evento de él,

Tienes una referencia al control en el parámetro "Sender".

Saludos
Alfredo



Alfredo, no consigo más que saber su nombre, pero lo que quiero, es
poder asignar valores a sus propiedades


algo asi:

this.BackColor -> y que no ponga la propiedad backcolor del form, sino
que afecte al control con el focus, ya que estoy en un evento de
él siento no entender, pero sender solo me permite saber su clase,
Sender.ToString()
Respuesta Responder a este mensaje
#2 Juan Diego Bueno
28/05/2008 - 13:24 | Informe spam
Hola Juan:

Juanato ha formulado el miércoles :
On 28 mayo, 12:59, Alfredo Novoa wrote:
Hola Juanato,

El Wed, 28 May 2008 03:56:27 -0700 (PDT), Juanato escribió:

No consigo referenciar al control cuando estoy en un evento de él,



Tienes una referencia al control en el parámetro "Sender".

Saludos
Alfredo



Alfredo, no consigo más que saber su nombre, pero lo que quiero, es
poder asignar valores a sus propiedades


algo asi:

this.BackColor -> y que no ponga la propiedad backcolor del form, sino
que afecte al control con el focus, ya que estoy en un evento de
él siento no entender, pero sender solo me permite saber su clase,
Sender.ToString()



Tienes que convertir el control a su tipo concreto o al tipo Control:

Control c = sender as Control
if (c!=null)
{
// Aquí accedes a las propiedades de Control
}

Si sabes el tipo de control a priori, y quieres acceder a sus
propiedades, lo mismo, pero dando el tipo. Por ejemplo, para un textbox

TextBox t = sender as TextBox
if (t!=null)
{
// Igual que antes
}

También podrías usar el operador "is", pero "as" es más rápido y
aconsejable

Un saludo

http://www.moondance.es
Respuesta Responder a este mensaje
#3 Alberto Poblacion
28/05/2008 - 14:09 | Informe spam
"Juanato" wrote in message
news:
No consigo referenciar al control cuando estoy en un evento de él,
porque this solo me sirve para el form al que pertenece pensaba
que this va anidando la posición hasta definir al objeto del form
activo sobre el que se está operando alguien me puede ayudar ?



No, el "this" siempre se refiere a la instancia de la CLASE que estás
ejecutando. Si el código del evento lo escribes dentro de la clase del
formulario que tiene el control, te devuelve el formulario. Si hubieras
escrito un control personalizado, y hubieras metido el código dentro de la
clase del control, el "this" te devolvería el control.

Como ya te ha contestado Alfredo, si dentro de un evento quieres saber
cuál es el control que ha disparado el evento puedes usar el primer
parámetro "sender". Como es un Object, tendrás que hacer un "cast" al tipo
de control que estés utilizando si quieres recuperar una referencia que te
permita acceder a las propiedades del control.
Respuesta Responder a este mensaje
#4 Juanato
29/05/2008 - 00:39 | Informe spam
Alberto Poblacion wrote:
"Juanato" wrote in message
news:
No consigo referenciar al control cuando estoy en un evento de él,
porque this solo me sirve para el form al que pertenece pensaba
que this va anidando la posición hasta definir al objeto del form
activo sobre el que se está operando alguien me puede ayudar ?



No, el "this" siempre se refiere a la instancia de la CLASE que estás
ejecutando. Si el código del evento lo escribes dentro de la clase del
formulario que tiene el control, te devuelve el formulario. Si hubieras
escrito un control personalizado, y hubieras metido el código dentro de
la clase del control, el "this" te devolvería el control.

Como ya te ha contestado Alfredo, si dentro de un evento quieres
saber cuál es el control que ha disparado el evento puedes usar el
primer parámetro "sender". Como es un Object, tendrás que hacer un
"cast" al tipo de control que estés utilizando si quieres recuperar una
referencia que te permita acceder a las propiedades del control.



Gracias, muchas gracias.. ahora solo debo de enterarme lo que cojones es
un cast... vengo de Xbase despues de haberlo madurado hace trece años...
y me viene corto lo poco de programación orientada a objetos que
sabia... en Borland C++ es así o es más práctico ?
Respuesta Responder a este mensaje
#5 Alberto Poblacion
29/05/2008 - 09:33 | Informe spam
"Juanato" wrote in message
news:
Gracias, muchas gracias.. ahora solo debo de enterarme lo que cojones es
un cast...



El "cast" es la forma de indicarle al compilador que haga la conversión
de un tipo de dato a otro tipo compatible con el anterior, en nuestro caso
de una clase madre (object) a una clase hija de la anterior (por ejemplo
TextBox). Se escribe poniendo entre paréntesis el tipo al que se desea
convertir, por delante de la expresión que debe convertirse. Por ejemplo:

void LoQueSea_Click(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
tb.Text = "Prueba!!!";
}

El "cast" es eso de "(TextBox)" escrito delante de "sender".
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida