COMBOBOXEX - COMBOBOX AVEC IMAGES - WEBCONTROL EN POUR ASP ÉCRIT EN VB.NET

Utilisateur anonyme - 18 juil. 2004 à 02:53
cs_DeathAngel Messages postés 117 Date d'inscription vendredi 12 avril 2002 Statut Membre Dernière intervention 13 avril 2007 - 16 févr. 2006 à 18:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24665-comboboxex-combobox-avec-images-webcontrol-en-pour-asp-ecrit-en-vb-net

cs_DeathAngel Messages postés 117 Date d'inscription vendredi 12 avril 2002 Statut Membre Dernière intervention 13 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)

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
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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)


En tout cas bravo pour la source


Bonne continuation

Cyril
Utilisateur anonyme
18 juil. 2004 à 02:53
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 ;) ...