Ich denke nachfolgender Code stimmt mit deinen Vorstellungen �berein.
Ich kompiliere die Datei, und f�ge dann der Toolbox dieses Control
hinzu. Manchmal erscheint dann im WebForm Designer nur "[CustomControl
"CustomeControl1"]", nachdem ich das Control neu kompiliert habe.
Ich denke es ist ein Problem des Designers. Ich entferne das Control von
der WebForm, gehe in den HTML Code und entferne die Zeile "<%@ Register
TagPrefix="cc1" Namespace="CustomControls" Assembly="ClassLibrary2" %>",
die mein Control registriert. Danach binde ich es wieder neu ein, in dem
ich das Control auf den Designer zeihe. Sollte das auch nichts helfen,
dann einfach mal in den HTM Modus und wieder zur�ck in den Design Modus
wechseln, hilft auch manchmal.
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomControls
{
public class Composite : WebControl, INamingContainer
{
Label label;
public string Text
{
get
{
EnsureChildControls();
return label.Text;
}
set
{
EnsureChildControls();
label.Text = value;
}
}
protected override void CreateChildControls()
{
label = new Label();
label.Height = 50;
label.Width = 500;
label.Text = "Vorname:";
Controls.Add(label);
TextBox box2 = new TextBox();
box2.Text = "0";
Controls.Add(box2);
Button button1 = new Button();
button1.Text = "OK";
Controls.Add(new LiteralControl("<br>"));
Controls.Add(button1);
}
}
}
CIAO
Michael
> -----Urspr�ngliche Nachricht-----
> Von: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Im Auftrag von Stephan Hartmann
> Gesendet: Montag, 24. Februar 2003 16:06
> An: [EMAIL PROTECTED]
> Betreff: [Asp.net] Re: [Asp.net] Composite Control, f�r
> Michael Schwarz
>
>
> Hallo Michael,
>
> Danke erstmal, aber das war es nicht ganz...
> Dein Beispiel ist ein Custom Control,
> meins ist ein Composite(!) Control und sieht so aus:
> ...
> public class Test : WebControl, INamingContainer {
> ...
> protected override void CreateChildControls() {
> Label L1 = new Label();
> TextBox T1 = new TextBox();
> ....
> T1.Styles.Add("top", "20px");
> ...
> Controls.Add (L1);
> Controls.Add(T1);..... usw.
> }
> }
>
> Die Children werden in Runtime ohne Implementation von
> Render() erzeugt und gerendert. Die Styles- Angaben zur
> Position werden automatisch auf die Control- Position
> bezogen. (d.h. bei Control- Left von 120 und Child- Left von
> 20 erscheint das Child auf einer absoluten Position von Left
> 140 usw., wie es ja auch sein soll.) Das macht das Framework
> von alleine- So weit, so gut. Leider f�hrt die Doku �ber
> Composite Controls nicht weiter.... Inhaltliche Anzeige geht
> halt erst in Runtime (ist auch irgendwo klar, da
> CreateChildControls nicht im Design aufgerufen wird.) Die
> Frage hier ist, ob es nicht vielleicht einen Mechanismus
> gibt, mit dem ich in Designtime �berhaupt was sehe... (z.B.
> Controlname w�re schon ausreichend..) Wenn ich Render()
> implementiere, mu� ich alles Rendern. Zum Hintergrund : Das
> Control soll einen Edit- Dialog f�r beliebige(!) Datens�tze
> dynamisch aufbauen, die Definition kommt aus einer Tabelle in
> der Datenbank, in der zum Tabellennamen der Datentabelle die
> anzuzeigenden Feldnamen, Positionen, evtl. sprachabh�ngige
> Texte usw. pro Tabelle und Feld hinterlegt sind, d.h. der
> statische Aufbau von Forms pro Datensatz soll entfallen,
> gleichzeitig aber kein "Grid-Like Editing" verwendet werden.
>
> ----- Original Message -----
> From: "Michael Schwarz" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Monday, February 24, 2003 3:39 PM
> Subject: AW: [Asp.net] Composite Control
>
>
> using System;
> using System.Web;
> using System.Web.UI;
> using System.Web.UI.WebControls;
> using System.ComponentModel;
> using System.Collections;
> using System.Xml;
> using System.Diagnostics;
> using System.Reflection;
>
> namespace ClassLibrary2
> {
> [ToolboxData("<{0}:TEST runat=server></{0}:TEST>")]
> public class TEST : WebControl
> {
> private string m_MeinWert;
>
> [Category("Meine Werte"), DefaultValue("Mein Default
> Text")]
> public string MeinWert
> {
> get { return m_MeinWert; }
> set { m_MeinWert = value; }
> }
>
> protected override void Render(HtmlTextWriter writer)
> {
> writer.Write("<b>" + m_MeinWert + "</b>");
> }
> }
> }
>
>
>
> Kompilieren, dann in der Toolbox "Customize Toolbox..."
> ausw�hlen, und die entsprechende DLL einbinden. Dann kannst
> Du die auf eine WebForm einbinden, die "MeinWert" Eigenschaft
> ver�ndern,... Fertig!
>
> CIAO
> Michael
>
>
>
>
>
>
>
>
>
> -----Urspr�ngliche Nachricht-----
> Von: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Im Auftrag von Stephan
> Hartmann
> Gesendet: Montag, 24. Februar 2003 15:28
> An: ASP-Liste
> Betreff: [Asp.net] Composite Control
>
>
> Hallo,
>
> habe in meiner vorigen Frage bereits die ersten Forstschritte
> gemacht....
>
> - Das Sample "composite control" leitet von Control ab, wenn
> ich von WebControl ableite, bekomme ich zumindest eine
> "leere" Komponente, die ich auf dem Form sehe und auch
> verschieben kann.
> - Allerdings ist diese Komponente eben leer....
> - Implementierung von [Designer(typeof(ControlDesigner))]
> f�hrt zu Fehler "Type or Namespace "Designer" could not not
> found........"
>
> Hat da jemand Erfahrung?
>
> Danke, Stephan
>
> _______________________________________________
> Asp.net mailing list
> [EMAIL PROTECTED]
> http://www.glengamoi.com/mailman/listinfo/asp.net
>
>
> _______________________________________________
> Asp.net mailing list
> [EMAIL PROTECTED]
> http://www.glengamoi.com/mailman/listinfo/asp.net
>
_______________________________________________
Asp.net mailing list
[EMAIL PROTECTED]
http://www.glengamoi.com/mailman/listinfo/asp.net