Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Propiedad TStrings en diseño. (cannot assign a nil to a..)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Propiedad TStrings en diseño. (cannot assign a nil to a..) Responder citando

Hola a todos,
estoy hace unas horas intentando solucionar un problema.

Creo un componente, derivado de TImage, en el cual quiero crear una lista de paths donde estarian ubicados los dibujos correspondientes. Para ello, añado una propiedad lista de tipo TStrings o TStringList, como hago a continuación.

Código:

class PACKAGE TImageMejor : public TImage
{
private:
    TStrings *lista;
protected:
public:
        __fastcall TImageMejor(TComponent* Owner);
__published:
    __property TStrings *ListaCaminos = {read=lista,write=lista};
};


Sin embargo, al compilar y registrar el componente, al clicar sobre la propiedad ListaCaminos, me aparece el mensaje de error (cannot assign a nil to a TRichEditStrings.)

¿Como puedo invocar el editor de TStrings o TStringList y evitar ese mensaje de error?

Por cierto, en el constructor hago this->lista = NULL;
Imagino que debo crear una instancia de TStrings pero en el constructor del nuevo componente no me ha dejado. ¿Me podeis echar una mano?
_________________
Be water my friend.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Efectivamente, tienes que crear Lista, en caso contrario tendrás error ya que le asignas a ese puntero un valor nulo.

Yo lo crearía en el constructor de tu componente o en el evento OnCreate:

Código:
lista = new TStrignList;


No tienes porqué tener ningún problema.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Ampliando un poco la respuesta de escafandra.. tienes que crear además el método "setlista" para copiar el valor del editor en tiempo de diseño en tu TStringList:

Código:
class PACKAGE TImageMejor : public TImage
{
private:
    TStrings* lista;
protected:
public:
    __fastcall TImageMejor(TComponent* Owner);
    __fastcall ~TImageMejor();
    void __fastcall setlista(TStrings* valor);
__published:
    __property TStrings* ListaCaminos = {read=lista, write=setlista};
};



__fastcall TImageMejor::TImageMejor(TComponent* Owner)
    : TImage(Owner)
{
   lista = new TStringList;
}

__fastcall TImageMejor::~TImageMejor()
{
    delete lista;
}

// Esto es necesario para que se copie
// el valor del editor en tu TStringList
void __fastcall TImageMejor::setlista(TStrings* valor)
{
    lista->Assign(valor);
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.