Control-Designtime-Serialisierung

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von us4711.

    Control-Designtime-Serialisierung

    Ich leite von PrintDocument ein eigenes Control ab, das mir erweiterte Funktionalität zur Verfügung stellen soll.
    Eine der zusätzlichen Klassen ist:

    VB.NET-Quellcode

    1. <Serializable()>
    2. <TypeConverter(GetType(ExpandableObjectConverter))>
    3. Public Class BorderAppearance
    4. Public Sub New()
    5. MyBase.new()
    6. End Sub
    7. Property BorderSize As Int32 = 0
    8. Property BorderColor As Color = Color.Empty
    9. Sub Draw(e As PrintPageEventArgs, ...)
    10. ...
    11. End Sub
    12. End Class

    und wird referenziert:

    VB.NET-Quellcode

    1. <TypeConverter(GetType(CellBorderConverter))>
    2. <DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)>
    3. ReadOnly Property CellBorder As BorderAppearance
    4. Get
    5. Return m_CellBorder
    6. End Get
    7. End Property

    Keine Probleme, Designtime-Serialisierung geht einwandfrei. Nach diesem Schema sind mehrere Klassen gestrickt.
    Und dann kommt diese Klasse
    Referenz:

    VB.NET-Quellcode

    1. <TypeConverter(GetType(CellImageTypeConverter))>
    2. <DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)>
    3. ReadOnly Property Image As PrintDocumentExExtendedPageSettingsCellImageContent
    4. Get
    5. Return m_Image
    6. End Get
    7. End Property

    Klasse:

    VB.NET-Quellcode

    1. <Serializable()>
    2. <TypeConverter(GetType(ExpandableObjectConverter))>
    3. Public Class PrintDocumentExExtendedPageSettingsCellImageContent
    4. Public Sub New()
    5. MyBase.new()
    6. End Sub
    7. Property Value As Image = Nothing
    8. Property ImageLayout As DataGridViewImageCellLayout = DataGridViewImageCellLayout.Zoom
    9. Sub Draw(e As PrintPageEventArgs, ...)
    10. ...
    11. End Sub
    12. End Class

    Der Klassenaufbau ist als identisch, wird auch serialisiert, d.h. auf das referenzierte IMAGE wird richtig in Form.InitializeComponents verwiesen:

    VB.NET-Quellcode

    1. Me.PrintDocumentEx1. ... .Image.Value = Global.Projektname.My.Resources.Resources.NameDerResource

    Im Release-Modus gestartet, ist alles i.O.
    Ich starte das Programm im Debug-Modus, dann erfolgt die Ausgabe wie erwartet.
    Die Form mit abgeleiteten Control jedoch verhält sich unanständig:

    Ich vermute, das dies irgendwie mit der IMAGE-Property zu tun hat ... iMo bin ich mit meinem Latei zu Ende. Vielleicht kann des ehrenwerte Forum helfen?
    Nur mal der Vollständigkeit halber:
    Offensichtlich hatte ich wie auch immer die ressourcen sowohl der Form als auch des Projektes zerschossen ... Neues Projekt mit neuer Form angelegt, und alles läuft wie es laufen sollte ..
    Gedownloaded SolutionExplorer2010.zip
    Releasekompliert mit 13 Warnungen
    Aufruffehlermeldung:
    Irgendeine Idee?
    Bilder
    • SolutionExplorerFehler.JPG

      32 kB, 456×199, 155 mal angesehen
    Sorry, Fehler auch ohne Space.
    Geht aber bei allen anderen getesteten sln, auch eine mit 15 Projekten ...
    Was kann's wohl sein?
    EDIT:
    Noch ein paar gefunden, gleicher fehler, aber kein Schema zu erkennen ---???
    hab jetzt den Code geguckt, der diesen Fehler wirft:

    VB.NET-Quellcode

    1. Dim Mts = Regex.Matches(SolutionFileContent, Pattern)
    2. If Mts.Count = 0 Then Throw New ArgumentOutOfRangeException( _
    3. "_Solution.Fullname", _Solution.Fullname, "Kein Projekt gefunden in")
    Offensichtlich liegts am Inhalt der Solution-Datei - kannste den mal posten?
    verstehe ich nicht. Bei mir analysiert er das korrekt.

    Kannst du bei dir im SolutionExplorer diese CodeStelle ausfindig machen?

    VB.NET-Quellcode

    1. Dim Pattern = String.Concat( _
    2. "Project\(""\{.+\}""\) = "".+"", ""(?<ProjRelPath>.+)"", ""(?<ProjGuid>\{.+\})""\r")
    3. 'Der Pattern matcht einen kompletten Projekteintrag
    4. '! im Solutionfile. Aufzeichnende Gruppen: 1) <ProjRelPath>:
    5. '! Pfad zum Proj-File, relativ zum Folder der Solution
    6. '! 2) <ProjGuid>: Guid des Projektes
    7. Dim Mts = Regex.Matches(SolutionFileContent, Pattern)
    8. If Mts.Count = 0 Then Throw New ArgumentOutOfRangeException( _
    9. "_Solution.Fullname", _Solution.Fullname, "Kein Projekt gefunden in")

    Wesentlich ist, ob bei dir der Pattern unterschiedlich gebildet ist, also diese Zeile:

    VB.NET-Quellcode

    1. Dim Pattern = String.Concat( _
    2. "Project\(""\{.+\}""\) = "".+"", ""(?<ProjRelPath>.+)"", ""(?<ProjGuid>\{.+\})""\r")
    HEUREKA!!
    Hab' den Pattern in dtsSolutionExplorer.vb ausgetauscht, und jetzt geht's.
    Der Pattern im ZIP-Download war

    VB.NET-Quellcode

    1. Dim Pattern = String.Concat( _
    2. "Project\(""\{.+\}""\) = ""[\w\.]+"", """, _
    3. "(?<ProjRelPath>.+)", _
    4. """, """, _
    5. "(?<ProjGuid>\{.+\})", _
    6. """\r")


    Danke für Deine Bemühungen.
    Siehst Du eine Möglichkeit, das Teil direkt un VS zu integrieren, z.B. als Menüpunkt + Shortcut? Würde mich dazu verführen, es auch WIRKLICH zu benutzen ;)
    Joa, man kann für VS-Vollversionen glaub PlugIns und Zeugs schreiben, aber ich bin nicht so der PlugIn-Freund - mir reichts eiglich, dass VS auch so schon gelegentlich abschmiert.
    Auch hätten die Express-Version-Besitzer nix von sowas.
    Den SolutionExplorer ins Kontextmenü des DateiBrowsers einzubinden ist dir gelungen?
    Weil dann findich das Teil komfortabel genug: Rechtsklick auf ein .sln-File - "Öffnen mit..." - "SolutionExplorer" - "Backup"

    us4711 schrieb:

    Würde mich dazu verführen, es auch WIRKLICH zu benutzen ;)
    Naja, was dich eigentlich zu einem Backup-Tool verführen könnte, wären noch ein paar so Abstürze mit Demolierung der Resourcen und so Scherze. ^^
    JaJa, das hat natürlich geklappt. Geht auch prima. Du hast mit den Motivationsgründen natürlich recht, aber manchmal zeige ich mich schon ... sagen wir mal, beratungsresistent. Aber das Tool ist schon ganz prima, Respekt.