none
Acceder a la propiedad EditValue desde un Array de objetos RRS feed

  • Pregunta

  • Hola, tengo un array de objetos cargado de objetos de DevExpress, textEdit, picEdit, searchLookUpEdit etc... lo hago de la siguiente forma :

      object[] ControlesEdit; //Declaracion
    ControlesEdit = new object[] { txtID, txtNombre} //y demas controles de otros tipos...
    
    
    
    

    Tengo un for que me recorre cada elemento o control del array ControlesEdit[] y la idea es poder asignarle un valor a la propiedad EditValue la cual es una propiedad de todos los controles de DevExpress. Sin embargo este es precisamente el problema, que cuando hago algo como esto:

    CajasdeTexto[i].EditValue = tal cosa
    
    No funciona, La propiedad EditValue no es reconocida. :(


    Renzo Rivera

    jueves, 18 de junio de 2020 9:39

Todas las respuestas

  • Buenas:

    using System;
    
    public class SamplesArray  {
    
       public static void Main()  {
    
          // Creates and initializes a one-dimensional array.
          String[] myArr1 = new String[5];
    
          // Sets the element at index 3.
          myArr1.SetValue( "three", 3 );
          Console.WriteLine( "[3]:   {0}", myArr1.GetValue( 3 ) );
    
          // Creates and initializes a two-dimensional array.
          String[,] myArr2 = new String[5,5];
    
          // Sets the element at index 1,3.
          myArr2.SetValue( "one-three", 1, 3 );
          Console.WriteLine( "[1,3]:   {0}", myArr2.GetValue( 1, 3 ) );
    
          // Creates and initializes a three-dimensional array.
          String[,,] myArr3 = new String[5,5,5];
    
          // Sets the element at index 1,2,3.
          myArr3.SetValue( "one-two-three", 1, 2, 3 );
          Console.WriteLine( "[1,2,3]:   {0}", myArr3.GetValue( 1, 2, 3 ) );
    
          // Creates and initializes a seven-dimensional array.
          String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];
    
          // Sets the element at index 1,2,3,0,1,2,3.
          int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };
          myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );
          Console.WriteLine( "[1,2,3,0,1,2,3]:   {0}", myArr7.GetValue( myIndices ) );
       }
    }

    Más información.

    https://docs.microsoft.com/es-es/dotnet/api/system.array.getvalue?view=netcore-3.1

    Saludos.


    http://electronica-pic.blogspot.com

    jueves, 18 de junio de 2020 9:53
  • Hola, gracias por responder. Pero la solución propuesta no funciona para mi. Tengo un arreglo con controles de DevExpress dentro y lo que me gustaría es poder acceder a cualquiera de sus propiedades estando dentro del arreglo. Ejemplo: ArregloControles[index].Name :(

    Renzo Rivera

    jueves, 18 de junio de 2020 11:16
  • hola

    >>la idea es poder asignarle un valor a la propiedad EditValue la cual es una propiedad de todos los controles de DevExpress

    Pero de donde sale CajadeTexto ? no queda claro el contexto porque antes venias explicando que tenias un ControlesEdit y despues sales con otra variable diferente

    Si el item que agregas al array es un object entonces no tendras acceso a la funcionalidad del control de DevExpress tienes que castear antes

    ((TextBox)CajasdeTexto[i]).EditValue = tal cosa

    la propiedad EditValue no la tiene object, por eso necesitas convertir al tipo que si lo tenga definido

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 18 de junio de 2020 13:29
  • Hola Leandro, te comento que así es como lo tenia, usaba esa misma lógica algo parecido a esto:
     TextEdit T = new TextEdit();
     T = (TextEdit)Cajasdetexto[i];
     T.EditValue ="Tal cosa"
    El problema es que tendría que estar validando cada posible tipo de control, si es una foto por ejemplo, un check edit etc...
    Pero comento que logre resolverlo con la librería Reflection de la siguiente forma :
    string Propiedad = "EditValue"; //Nombre de la propiedad que se desea acceder
    Type Tipo_de_objeto = CajasdeTexto[i].GetType(); // obtener el tipo de control que se encuentra en el array
    PropertyInfo propertyInfo = Tipo_de_objeto.GetProperty(Propiedad); //buscar la propiedad editValue del objeto que se encuentra dentro del array
    
    //Asignarle un valor a dicha propiedad
    propertyInfo.SetValue(CajasdeTexto[i], "tal cosa");
    Muchas gracias por responder
     

    Renzo Rivera


    • Editado Renzo19 jueves, 18 de junio de 2020 23:16
    jueves, 18 de junio de 2020 23:15
  • hola

    >>El problema es que tendría que estar validando cada posible tipo de control

    si claro, pero se podria ver si todos estos controles no heredan de alguna base en comun que tenga la definicion de EditValue

    si todos los que usan aplican la misma clase base podrias castear a esta dos sin importar cual sea

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 19 de junio de 2020 4:07
  • Hola Leandro Tuttini como mencioné antes ya resolví el problema utilizando reflection, sin embargo  antes lo tenia de la forma que propones y como el array contenido elementos de todo tipo, al querer asignarle una foto a un elemente casteado como TextEdit se producía un error, lo mismo con otros tipos de controles. Ojo en que todos tenían la misma propiedad EditValue. No obstante agradezco mucho la ayuda y las sugerencias propuestas. 

    Renzo Rivera

    viernes, 19 de junio de 2020 12:47
  • Hola Renzo19

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

     

     Andres Aguilar

    ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    viernes, 19 de junio de 2020 13:52
    Moderador