Laden...

Woher weiß der Visual Studio Forms Designer, welchen Code er gennerieren muss?

Erstellt von DomiOh vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.928 Views
D
DomiOh Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren
Woher weiß der Visual Studio Forms Designer, welchen Code er gennerieren muss?

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?

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo DomiOh,

ich verstehe deine Frage nicht so genau. Er ist halt so programmiert, dass er den richtigen Code generiert.

herbivore

D
DomiOh Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

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.

S
489 Beiträge seit 2007
vor 13 Jahren

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.

D
DomiOh Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Inwiefern selber programmieren?

916 Beiträge seit 2008
vor 13 Jahren

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...

E
395 Beiträge seit 2007
vor 13 Jahren

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

1.130 Beiträge seit 2007
vor 13 Jahren

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.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

D
DomiOh Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Was für attribute werden denn da verwendet?

3.430 Beiträge seit 2007
vor 13 Jahren

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

D
DomiOh Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

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.

Gelöschter Account
vor 13 Jahren

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.

D
DomiOh Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Danke für den Hinweis.

Leider habe ich bisher so ein Proxy-Attribut noch nicht gefunden. Ich muss mal weitersuchen 😉

795 Beiträge seit 2006
vor 13 Jahren
[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.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
D
DomiOh Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Nach dem Designer habe ich schon geschaut.

Nur habe ich bisher nicht herausfinden können, wo dieser Designer seinen Code generiert.

3.511 Beiträge seit 2005
vor 13 Jahren

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)