Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » HILFE! Eigene Objekte in Generic::List als Property (CLI)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.06.2007, 11:15 Uhr
~palama
Gast


Hallo Leute, ich brauche euren Gehirnschmalz!!!

Ok, ich sitze vielleicht schon etwas länger an dem Problem.
Vielleicht sehe daher den Wald vor lauter Bäumen nicht mehr,
aber dass müsst ihr entscheiden:

Ich schreibe momentan genüsslich an einem Steuerlement (Usercontrol).

Das Ziel ist relativ simpel:
In der entstehenden Komponente soll es eine Eigenschaft geben, die eine dynamische Anzahl von eigenen Objekten (halt Objekte von einer eigenen Klasse) hat.

Die Objekte haben selbst auch Eigenschaften (Properties).


Bislang bin ich soweit gekommen:
* Der unten stehende Code (wenn auch nicht besonders schön ) wird komplett kompiliert.
* Die dabei entstehende dll kann ich einbinden,
* und die Komponente z.B. auf ein Formular einfügen.
* Die Eigenschaften werden auch komplett richtig, so wie ich das will, im Eigenschaftsfenster (PropertyGrid) angezeigt.
* Werden in dem Grid Daten eingegeben, können diese dort auch wieder abgerufen werden.
Soweit, so gut.

Aber jetzt wirds knifflig:
Wir befinden uns leider immer noch in der Designzeit des neuen Projekts.
Will ich jetzt aber das Formular-Projekt kompilieren bringt er mir folgende Fehlermeldungen:


Zitat:

Form1.resX : error RG0000: Der Typ konnte nicht aus den Daten in Zeile 129, Position 5, gelesen werden. Möglicherweise hat sich die interne Struktur des Typs geändert. Implementieren Sie ISerializable für den Typ, oder stellen Sie einen Typkonvertierer bereit, der ein zuverlässigeres Konvertierungsformat bietet, wie z.B. Text oder ein Bytearray. Konvertierungsausnahme: Die Assembly ArrayProperty, Version=1.0.2708.17637, Culture=neutral, PublicKeyToken=null kann nicht gefunden werden..



und:


Zitat:

Form1.resX : error RG0000: Spezifische Ausnahme: "XmlException". Meldung: "Der Typ konnte nicht aus den Daten in Zeile 129, Position 5, gelesen werden. Möglicherweise hat sich die interne Struktur des Typs geändert. Implementieren Sie ISerializable für den Typ, oder stellen Sie einen Typkonvertierer bereit, der ein zuverlässigeres Konvertierungsformat bietet, wie z.B. Text oder ein Bytearray. Konvertierungsausnahme: Die Assembly ArrayProperty, Version=1.0.2708.17637, Culture=neutral, PublicKeyToken=null kann nicht gefunden werden.. ---> XmlException: Der Typ konnte nicht aus den Daten in Zeile 129, Position 5, gelesen werden. Möglicherweise hat sich die interne Struktur des Typs geändert. Implementieren Sie ISerializable für den Typ, oder stellen Sie einen Typkonvertierer bereit, der ein zuverlässigeres Konvertierungsformat bietet, wie z.B. Text oder ein Bytearray. Konvertierungsausnahme: Die Assembly ArrayProperty, Version=1.0.2708.17637, Culture=neutral, PublicKeyToken=null kann nicht gefunden werden.. Zeile 129, Position 5. ---> SerializationException: Die Assembly ArrayProp...".




Also, wie gesagt, ich sitze schon lange dran.
Hab auch versucht das ISerializable-Interface zu nuten...
Aber das hab ich dann nicht wirklich hinbekommen.
Vielleicht liegt es aber auch an was ganz anderem.

Soweit mein Problem.

Hoffentlich fällt euch was ein.

Viele Grüße, Palama




C++:

#pragma once

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;


namespace ArrayProperty {
    [Serializable, TypeConverter(ExpandableObjectConverter::typeid)]
    public ref class myClass
    {
        public:
            property int MyValue
            {    
                int get()
                {
                    return this->myInnerValue;
                }
                void set(int value)
                {
                    this->myInnerValue = value;
                }
            }
        private:
            int myInnerValue;
    };

    /// <summary>
    /// Zusammenfassung für ArrayPropertyControl
    /// </summary>
    ///
    /// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
    ///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
    ///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
    ///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
    ///          arbeiten, die diesem Formular zugewiesen sind.
    public ref class ArrayPropertyControl : public System::Windows::Forms::UserControl
    {
    public:
        ArrayPropertyControl(void)
        {
            InitializeComponent();
            //
            //TODO: Konstruktorcode hier hinzufügen.
            //
        }

    protected:
        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        ~ArrayPropertyControl()
        {
            if (components)
            {
                delete components;
            }
        }

    private:
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        System::ComponentModel::Container^ components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        void InitializeComponent(void)
        {
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
        }
#pragma endregion
    
    public:
        [Category ("1st")]
        property myClass^ PropertySingle
        {
            myClass^ get()
            {
                if ( this->myInnerSingleClass == nullptr )
                {
                    this->myInnerSingleClass = gcnew myClass();
                }
                return this->myInnerSingleClass;
            }
            void set(myClass^ value)
            {
                this->myInnerSingleClass = value;
            }
        }

        [Category ("1st")]
        property System::Collections::Generic::List<myClass^>^ PropertyGenericList
        {
            System::Collections::Generic::List<myClass^>^ get()
            {
                if ( this->myInnerGenericList == nullptr )
                {
                    this->myInnerGenericList = gcnew System::Collections::Generic::List<myClass^>();
                }
                return this->myInnerGenericList;
            }
            void set(System::Collections::Generic::List<myClass^>^ value)
            {
                this->myInnerGenericList = value;
            }
        }
    private:
        myClass^ myInnerSingleClass;
        System::Collections::Generic::List<myClass^>^ myInnerGenericList;

    };
}



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: