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

Signaler
Messages postés
276
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013
-
Messages postés
117
Date d'inscription
vendredi 12 avril 2002
Statut
Membre
Dernière intervention
13 avril 2007
-
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

Messages postés
117
Date d'inscription
vendredi 12 avril 2002
Statut
Membre
Dernière intervention
13 avril 2007

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
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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
Messages postés
276
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013

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