Asignar un objeto a otro...

08/09/2005 - 16:49 por Kravek | Informe spam
Me gustaría poder hacer lo siguiente:

dim Txt1 as new MyTextBox 'Esto heredaría del textbox normal
dim C1 as new Cliente(28) 'Una clase mia con los atributos y métodos que
sean
Txt1= C1 'ESTO ES LO QUE QUIERO PODER HACER!!! por supuesto no sería una
asignación sino sería asignar a ciertos atributos del textbox ciertos
valores contenidos en los atributos del cliente


¿es esto posible? ¿como? si no fuera posible en VB se podría hacer en C#?
como?

Preguntas similare

Leer las respuestas

#1 carlos
08/09/2005 - 17:07 | Informe spam
Hola Kravek, creo que la solución a tu problema seria la sobrecarga
operadores,
en C# es posible, no en vb.net 2003 , en la proxima (20005) si esta
disponible.
Un saludo.


"Kravek" escribió:

Me gustaría poder hacer lo siguiente:

dim Txt1 as new MyTextBox 'Esto heredaría del textbox normal
dim C1 as new Cliente(28) 'Una clase mia con los atributos y métodos que
sean
Txt1= C1 'ESTO ES LO QUE QUIERO PODER HACER!!! por supuesto no sería una
asignación sino sería asignar a ciertos atributos del textbox ciertos
valores contenidos en los atributos del cliente


¿es esto posible? ¿como? si no fuera posible en VB se podría hacer en C#?
como?



Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MS MVP VB]
08/09/2005 - 17:17 | Informe spam
Si se trata de modificar las propiedades de un objeto ya existente, entoces
no hay forma de hacerlo asi sino que deberas crear un metodo.

Si se trata de una conversion, donde el resultado es un objeto/valor nuevo,
entonces si puedes hacerlo con C# pero no con VB.NET ya que VB.NET no
soporta sobrecarga de operadores (recien en la v2005 los soporta).

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#3 Kravek
08/09/2005 - 18:35 | Informe spam
Me trato de explicar algo más y luego ya me comentais :p

El resultado de esa asignación sería algo como esto:

Txt1.Text = MyCLiente.Nombre
Txt1.CharacterCasing=CharacterCasing.Upper
Txt1.DataBindings.Add("Text",MyCLiente, "Nombre")
'Las propiedades de posicionamiento del TextBox NO deben tocarse al igual
que el resto)
En este caso es tonto pero podría llegar a ser útil (más bien es útil para
lo que tengo medio pensado...)

Si no os he entendido mal lo que quiero no se puede hacer ni con C# ni con
VB pos si que...


"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el
mensaje news:
Si se trata de modificar las propiedades de un objeto ya existente,
entoces no hay forma de hacerlo asi sino que deberas crear un metodo.

Si se trata de una conversion, donde el resultado es un objeto/valor
nuevo, entonces si puedes hacerlo con C# pero no con VB.NET ya que VB.NET
no soporta sobrecarga de operadores (recien en la v2005 los soporta).

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C

Respuesta Responder a este mensaje
#4 Eduardo A. Morcillo [MS MVP VB]
08/09/2005 - 20:28 | Informe spam
Con VB.NET puedes olvidarte completamente ya que no soporta sobrecarga de
operadores (ni siquiera su uso). En C# como asignacion no es posible ya que
la sobrecarga de la asignacion lo que hace es convertir un tipo en otro, no
tienes forma de pasarle el TextBox para que setee propiedades. Podria
hacerse con algun otro operador pero creo que la sintaxis quedaria un tanto
extraña. Por ejemplo:

class MiClase {

public static TextBox operator +(TextBox obj1, MiClase obj2) {
obj1.Text = obj.Nombre;
return obj1;
}

}

Y para usarlo tendrias que hacer con el valor de retorno porque sino no
compilaria. Por ejemplo:

txt1 += miClase;

Pero creo que no es claro ya que si no sabes que es lo que hace el operador
te preguntaras que significa sumarle un MiClase a un TextBox porque no es
una operacion que tenga mucha logica.

Lo mejor y mas claro seria agregar un metodo a la clase o al control que
setee las propiedades. Algo como:

' En la clase
Public Sub SetearDataBinding(ByVal control As TextBox)
control.Text = Me.Nombre
control.CharacterCasing=CharacterCasing.Upper
control.DataBindings.Add("Text", Me, "Nombre")
End Sub

' En el control
Public Sub SetearDataBinding(ByVal data As Object, campo As String)
control.Text = CallByName(data, campo, CallType.Get, Nothing)
control.CharacterCasing = CharacterCasing.Upper
control.DataBindings.Add("Text", data, campo)
End Sub

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#5 Kravek
08/09/2005 - 21:11 | Informe spam
Entendido! además estoy de acuerdo contigo en que lo de la suma no "suena"
muy bien (hombre para un datagrid o algo así...)
Lo haré mediante una propiedad en el control y así de paso me devolverá
siempre el objeto que le "asigné"

Gracias!!

Otra cosa ya abusando un poquiiito... ¿cómo puedo definir conversiones? me
refiero igual que automáticamente si opero con números de distinto dominio
se traducen al dominio más amplio

"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el
mensaje news:
Con VB.NET puedes olvidarte completamente ya que no soporta sobrecarga de
operadores (ni siquiera su uso). En C# como asignacion no es posible ya
que la sobrecarga de la asignacion lo que hace es convertir un tipo en
otro, no tienes forma de pasarle el TextBox para que setee propiedades.
Podria hacerse con algun otro operador pero creo que la sintaxis quedaria
un tanto extraña. Por ejemplo:

class MiClase {

public static TextBox operator +(TextBox obj1, MiClase obj2) {
obj1.Text = obj.Nombre;
return obj1;
}

}

Y para usarlo tendrias que hacer con el valor de retorno porque sino no
compilaria. Por ejemplo:

txt1 += miClase;

Pero creo que no es claro ya que si no sabes que es lo que hace el
operador te preguntaras que significa sumarle un MiClase a un TextBox
porque no es una operacion que tenga mucha logica.

Lo mejor y mas claro seria agregar un metodo a la clase o al control que
setee las propiedades. Algo como:

' En la clase
Public Sub SetearDataBinding(ByVal control As TextBox)
control.Text = Me.Nombre
control.CharacterCasing=CharacterCasing.Upper
control.DataBindings.Add("Text", Me, "Nombre")
End Sub

' En el control
Public Sub SetearDataBinding(ByVal data As Object, campo As String)
control.Text = CallByName(data, campo, CallType.Get, Nothing)
control.CharacterCasing = CharacterCasing.Upper
control.DataBindings.Add("Text", data, campo)
End Sub

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida