cs_DeathAngel
Messages postés117Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention13 avril 2007 16 févr. 2006 à 18:01
Salut les gars,
Pas mal le source.
Je rebondis sur ce que dit Cyril pour le rendu dans la fenêtre VS.
Ce n'est pas si compliqué que ça.
Il te suffit de créer une classe designer pour ton contrôle, et de l'associer à ton contrôle.
Par l'exemple, c'est plus simple :
Mon objet LabelScam (une textbox + un bouton) :
Ma classe designer ScamDesigner
Dans les attributs de la classe de ton objet, tu rajoute l'attribut Designer(Nom_Assembly.Nom_Designer, Nom_Assembly)
<Designer("ScamWebControls.ScamDesigner, ScamWebControls"), DefaultProperty("Text"), ToolboxData("<{0}:LabelScam runat=server></{0}:LabelScam>"), DefaultEvent("Click")> Public Class LabelScam
'Cet objet contient 2 propriétés (Zone_de_Texte et Boutton) qui renvoient les références à la textbox et au bouton de mon contrôle
End Class
Dans ta classe designer, tu surcharge la function GetDesignTimeHTML, dans laquelle tu réexécute plus ou moins le code du render de ton objet (sauf qu'il faut renvoyer un string et pas un htmltextwritter).
Public Class ScamDesigner
Inherits System.Web.UI.Design.ControlDesigner
Public Overrides Function GetDesignTimeHtml() As String
Dim ctl As LabelScam = CType(Me.Component, _
LabelScam) 'Mon contrôle, du type MonControle ^o^
If (ctl.Text <> "") Then
Dim sw As New StringWriter
Dim tw As New HtmlTextWriter(sw)
Return sw.ToString()
Else
Return Me.GetEmptyDesignTimeHtml()
End If
End Function
End Class
C'est magique.
Bon, pour l'instant, je n'en suis qu'au rendu, mais je vais essayer de gérer les évènements.
Quand j'aurais fait un truc qui marche, je le posterai.
@peluche et bon dév.
DA
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 18 juil. 2004 à 11:46
Ton controle m'a l'air tres interessant, il y a cependant un problème dans le zip : dans Test et exemple.zip il n'y a aucun fichier aspx ni vb ... juste un sln, et des gif
pour ton problème lorsqu'il y a deux controles, cela ecrit deux fois le meme script javascript, il faut utiliser les methodes Page.IsStartupScriptRegistered
pour ce qui est du string() je ne vois pas trop ou se trouve le problème, j'essayerais de regarder ca.
Pour le rendu dans la fenetre VS je pense qu'il va falloir utiliser la classe : System.Web.UI.Design.ControlDesigner mais je ne m'en suis jamais servis et ca me parait tres compliqué :)
J'ai rapidement survolé le code, et j'ai quelques remarques :
On Error Resume Next il faut eviter ca, utilise un bloc try catch end try
tu ecris les styles CSS dans la balise Form, ce qu'il faut eviter, car ce n'est pas du code HTML valide, c'est d'ailleur je pense pour cette raison, que beaucoup de controle de Microsoft posséde la propriété CSSClass. en effet pour ecrire un style apres le form, il faut dériver la class Page etc... heureusement asp.net 2 a comblé ce problème :) (il me semble)
Ah oui, j'oubliais :
Quand on saisit un ListIndex, en mode design, il affiche pas l'icone correspondante, alors qu'en mode execution, il l'affiche trés bien. Je vois pas du tout d'où ça vient.
Et puis une derniére question, est-ce que l'on peut faire un web control qui contienne du HTML que l'on est entrain de déposer dans la feuille en mode design ?
Je voudrais essayer d'implémenter un controle SSTab comme celui de windows, et j'aimerais que l'on puisse déposer dans l'onglet du code en mode Design.
Si vous avez des réponses à toutes ces questions (lol) vous pouvez m'écrire à l'adresse suivante : vbbigbrotherdv@aol.c0m (remplacer le 0 par un o ;) ...
16 févr. 2006 à 18:01
Pas mal le source.
Je rebondis sur ce que dit Cyril pour le rendu dans la fenêtre VS.
Ce n'est pas si compliqué que ça.
Il te suffit de créer une classe designer pour ton contrôle, et de l'associer à ton contrôle.
Par l'exemple, c'est plus simple :
Mon objet LabelScam (une textbox + un bouton) :
Ma classe designer ScamDesigner
Dans les attributs de la classe de ton objet, tu rajoute l'attribut Designer(Nom_Assembly.Nom_Designer, Nom_Assembly)
<Designer("ScamWebControls.ScamDesigner, ScamWebControls"), DefaultProperty("Text"), ToolboxData("<{0}:LabelScam runat=server></{0}:LabelScam>"), DefaultEvent("Click")> Public Class LabelScam
'Cet objet contient 2 propriétés (Zone_de_Texte et Boutton) qui renvoient les références à la textbox et au bouton de mon contrôle
End Class
Dans ta classe designer, tu surcharge la function GetDesignTimeHTML, dans laquelle tu réexécute plus ou moins le code du render de ton objet (sauf qu'il faut renvoyer un string et pas un htmltextwritter).
Public Class ScamDesigner
Inherits System.Web.UI.Design.ControlDesigner
Public Overrides Function GetDesignTimeHtml() As String
Dim ctl As LabelScam = CType(Me.Component, _
LabelScam) 'Mon contrôle, du type MonControle ^o^
If (ctl.Text <> "") Then
Dim sw As New StringWriter
Dim tw As New HtmlTextWriter(sw)
ctl.Zone_de_texte.RenderControl(tw)
ctl.Bouton.RenderControl(tw)
Return sw.ToString()
Else
Return Me.GetEmptyDesignTimeHtml()
End If
End Function
End Class
C'est magique.
Bon, pour l'instant, je n'en suis qu'au rendu, mais je vais essayer de gérer les évènements.
Quand j'aurais fait un truc qui marche, je le posterai.
@peluche et bon dév.
DA
18 juil. 2004 à 11:46
pour ton problème lorsqu'il y a deux controles, cela ecrit deux fois le meme script javascript, il faut utiliser les methodes Page.IsStartupScriptRegistered
pour ce qui est du string() je ne vois pas trop ou se trouve le problème, j'essayerais de regarder ca.
Pour le rendu dans la fenetre VS je pense qu'il va falloir utiliser la classe : System.Web.UI.Design.ControlDesigner mais je ne m'en suis jamais servis et ca me parait tres compliqué :)
J'ai rapidement survolé le code, et j'ai quelques remarques :
On Error Resume Next il faut eviter ca, utilise un bloc try catch end try
tu ecris les styles CSS dans la balise Form, ce qu'il faut eviter, car ce n'est pas du code HTML valide, c'est d'ailleur je pense pour cette raison, que beaucoup de controle de Microsoft posséde la propriété CSSClass. en effet pour ecrire un style apres le form, il faut dériver la class Page etc... heureusement asp.net 2 a comblé ce problème :) (il me semble)
En tout cas bravo pour la source
Bonne continuation
Cyril
18 juil. 2004 à 02:53
Quand on saisit un ListIndex, en mode design, il affiche pas l'icone correspondante, alors qu'en mode execution, il l'affiche trés bien. Je vois pas du tout d'où ça vient.
Et puis une derniére question, est-ce que l'on peut faire un web control qui contienne du HTML que l'on est entrain de déposer dans la feuille en mode design ?
Je voudrais essayer d'implémenter un controle SSTab comme celui de windows, et j'aimerais que l'on puisse déposer dans l'onglet du code en mode Design.
Si vous avez des réponses à toutes ces questions (lol) vous pouvez m'écrire à l'adresse suivante : vbbigbrotherdv@aol.c0m (remplacer le 0 par un o ;) ...