Comboboxex - combobox avec images - webcontrol en pour asp écrit en vb.net

Soyez le premier à donner votre avis sur cette source.

Vue 20 724 fois - Téléchargée 1 406 fois

Description

Avec ce control, vous pourrez trés simplement faire un controle de saisie comme un listbox, mais avec des images à l'intérieur. Regardez l'aperçu de l'écran pour être fixé sur son utilisation. Avec VisualStudio vous n'avez qu'à le déposer sur la feuille, puis le paraméter et rentrer sa liste. Il renvoye bien-entendu une valeur lorsqu'on valide le formulaire, et ce controle permet de compléter la triste et pauvre liste des controles proposés en standard par le HTML.

Quand à son utilité, j'ai matté les controles de VisualStudio et je l'ait pas vu, et puis s'il existe sur un autre site déjà... ben voilà ma version. J'ai décidé d'apprendre le DOT NET alors j'essaye de me créér des projets pour être confronté au max de pbs :)

Source / Exemple :


' Le code est dans le zip. Cleui-ci contient deux autres zips : 
' - ComboBoxEx.zip : Contient le code du contrôle
' - Test Et Exmple ... : comme son nom l'indique

Conclusion :

  • Indication d'utilisation :

Les Listes sont définies par les propriétées List et ImageList. Ne sachant pas comment comment traiter une propriété String() j'ai décidé de mettre un String simple, avec un séparateur qui est "|".

Alors quand vous créez une page n'oubliez pas de mettre dans le répértoire images/ de celle-ci les fichiers suivants :
- btn_down.gif
- spacer.gif
  • Compatiblité :

Alors j'ai généré le HTML du controle à partir de DreamWeaver, ou j'ai fais une maquette d'un controle en brut. Le JavaScript doit être compatible sous tous les navigateurs sans exception (même sous Mac - sauf un pb de balise DIV sous mac qui sera mal interprété - le width du scrollbar étant à 100%).
  • Améliorations :

J'aimerais d'ailleurs savoir comment les faire contenir directement dans me dll, et l'appeller à partir d'un lien sur un src.

J'aimerais aussi savoir pourquoi quand on veut gérer une propriétée String() cela fonctionne trés bien en mode paramétrage et en mode execution cela foire lamentablement. Si kkl1 peut m'expliquer comment gérer sur une propriétée un tableau de string, qui soit saisable en mode Paramétrage je suis prenneur.

Quand au script et HTML généré, c'est lourd, et prend pas mal de place... mais bon, ça permet au moins de pas se trembaler avec 1 script JS en plus. Si y'à la possibilité de gérer du javascript qu'une seule fois pour un controle... ben tenez moi au courant.

Sinon, niveau paramétrage, il est assez complet, mais bon vous avez le code-source, alors à vous d'en rajoutter selon les besoins.

Bonne prog à tous, akh

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_DeathAngel
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
jesusonline
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
17 -
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
aKheNathOn
Messages postés
285
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 ;) ...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.