Hallo,
ich habe ein Problem. Das komplett zu erklären, würde zu lange dauern.
Hat sich jemand schonmal mit dem VS Windows Forms Designer beschäftigt?
Ich frage mich, wie der Code-Designer weiß, welchen Code er für bestimmte Typen erstellen muss.
Manche Collections werden mit der Add-Funktion erstellt, manche über den eigenen Konstruktor usw.
Ich frage mich, woher der Forms Designer diese Information bezieht.
Mein Anliegen: Ich erstelle eine User-Komponente, die einen speziellen Code benötigt.
Hat jemand da irgendwie Ahnung von?
Hallo DomiOh,
ich verstehe deine Frage nicht so genau. Er ist halt so programmiert, dass er den richtigen Code generiert.
herbivore
Nun, die Frage ist, woher weiß der Designer welchen Code er wofür generieren muss?
Der Designer generiert bei Collections eigentlich alles über den Befehl Add.
Jedoch bei DateTime ein DateTime-Object mit dem richtigen Konstruktor.
So hat jeder Typ seinen speziellen Code, der generiert wird.
Mein Problem ist, dass ich eine Collection benutze, wozu ich eigentlich einen besonderen Code generieren müsste.
Meine Frage ist, woher weiß der Designer, welchen Code er für welchen Typ generieren muss?
Das muss ja irgendwo "verankert" sein.
Das hat herbivore bereits im Detail erklärt. Wenn Du was spezielles brauchst was der Designer nicht kann wirst Du nicht drum rum kommen es selber zu programmieren.
Naja mit selber programmieren meint SeboStone du musst den Code den der Designer nicht selber hinzufügt bzw. "falsch" hinzufügt selber implementieren.
Am Rande erwähnt, ich versteh dein Problem auch nicht so richtig. Wenn mal bisschen generierten Code posten würdest wären wir eventuell schlauer.
Again what learned...
ich glaube ich kann verstehen was du versuchst von uns zu erfahren
der desinger nimt die element die du in die form ziehst und wird warscheinlich über eine art factory den benötigten code generiern in dem er sich anschaut welche werte du geszt hast und wird anhand dieser einen string zurückliefern der dan in die FormX.desinger.cs geschrieben wird
alles im allen ist das nur eine art parser der aus grafischen objekten code erzeugt bzw aus code grafische objekte
ich hoffe dir damit weitergeholfen zu haben
als weiter lektüre empfehle ich das du dir vlt mal das factory muster anschaust
MfG Paul
Ich frage mich, woher der Forms Designer diese Information bezieht.
teilweise fest einprogrammiert , teilweise wird die methode unter den einprogrammerten möglichkeiten über attribute ausgewählt.
Hallo DomiOh,
was genau willst du denn erreichen und wieso willst du es so erreichen?
Denn mir fällt jetzt kein wirklich brauchbarer Grund wieso du da einen speziellen Code vom Designer brauchst.
Wenn du nicht sagst was du genau machen willst dann wird da noch X Posts an einander vorbei geredet.
Mit ziemlich großer Wahrscheinlichkeit kann man das auch über "normale" Wege lösen.
Grüsse
Das ist etwas schwer zu erklären.
Ich entwickle derzeit eine User-Control.
Ich habe ein property, welches in den "Properties" bearbeitet werden kann. Es ist eine Collection. Abgeleitet von List<T>.
Für dieses Property erstellt der Designer aber einen Code, der in dieser Form für mich nicht brauchbar ist.
Mir ist halt aufgefallen, dass z.b. für ein Array ein anderer Code erstellt wird, als für eine List oder für ein DateTime-Objekt (für den ja der DateTime-Konstruktor verwendet wird).
Und da dieser Code für verschiedene Objekte unterschiedlich aussieht, habe ich mich gefragt, ob es möglich ist, den Code, der für mein Property erstellt wird, zu beeinflussen.
Ich habe mir dazu schon einige Dinge angeschaut, mit einem Reflector.
Z.B. die Klasse CollectionEditor und den CodeDom. Habe aber keine Lösung finden können.
generell ist es so, das der designer für jede controls, designerproxys erzeugt. diese wissen wie sie die einzelnen controls behandeln, stylen und generieren (code) müssen. also jedes control hat seinen eigenen proxy. wie das bei den eigenschaften ist, weiß ich nciht. allerdings könnte man versuchen einen eigenen designerproxy zu schreiben.
edit: schau dir im reflector die vontrols im framework an. die haben alle ein attribut, das den proxy angibt. der wird vom designer ausgelesen und instanziiert.
Danke für den Hinweis.
Leider habe ich bisher so ein Proxy-Attribut noch nicht gefunden. Ich muss mal weitersuchen 😉
[Designer("System.Windows.Forms.Design.ButtonBaseDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public class Button : ButtonBase, IButtonControl
{
// Snip
}
Der ButtonDesigner handlet das ganze hier. Du musst dir deinen eigenen Designer schreiben.
Gruß, Christian.
Nach dem Designer habe ich schon geschaut.
Nur habe ich bisher nicht herausfinden können, wo dieser Designer seinen Code generiert.
Erstelle dir einen eigenen CodeDomSerializer und weise den deiner Komponente zu. Im Link ist auch gleich ein hübsches Beispiel wie das im Detail funktioniert.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)