Elle me permettait de modifier les attributs de la balise form,
difficilement accessible (Attributes.Remove ne fonctionnant pas..) et
donc de l'appeler dans une page aspx de cette façon :
Le problème avec VS2005 c'est que je ne vois plus mes composants dans
le formulaire (dans le designer) ! Il m'affiche une erreur à la place :
Form1:Unable to cast object of type
'System.Web.UI.Design.HtmlIntrinsicControlDesigner' to type
'System.Web.UI.Design.ControlDesigner'.
Quelqu'un saurait ce que je dois modifier ? Car je compte développer
d'autres classes du même type... Et le fait de ne pas voir les
composants dans le desisgner est un gros souci.
cs_stailer
Messages postés507Date d'inscriptionjeudi 28 mars 2002StatutMembreDernière intervention13 mai 20091 26 déc. 2005 à 16:15
Petite avancée, en faisant ceci :
internal class MyControlDesigner : System.Web.UI.Design.ControlDesigner
{
public MyControlDesigner() { }
public override string GetDesignTimeHtml()
{
return this.CreatePlaceHolderDesignTimeHtml();
}
public override void Initialize(IComponent component)
{
base.Initialize(component);
}
}
et donc :
[DesignerAttribute(typeof(MyControlDesigner)) ]
public class form : System.Web.UI.HtmlControls.HtmlForm {...}
Je n'ai plus la même erreur , mais :
Duplicate component name 'Form1'. Component names must be unique and case-insensitive.
Si je change le nom, avec Form2 par exemple, l'erreur est toujours la même. C'ets vraiment pénible ce problème, surtout que je voudrais développer d'autres composants de ce type. J'en profite donc pour remonter ce souci, en espérant avoir une petite aide...
Merci,
Vous n’avez pas trouvé la réponse que vous recherchez ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 26 déc. 2005 à 16:33
J'ai un peu de temps pour t'aider ;)
J'ai pas créer de controle form mais un controle container que voici
namespace CSLib.Web.UI.CSControls
{
/// <summary>
/// Un Container possede un titre et du contenu
/// </summary>
[ToolboxData(@"<{0}:Container runat=""server""></{0}:Container>"),
ParseChildren(false),
PersistChildren(true),
Designer(typeof(Design.ContainerDesigner))]
public class Container : CSLib.Web.UI.CSControls.CSControl
{
[Description("Title"),
Browsable(true)]
public string Title
{
get
{
if (ViewState["title"] != null)
return (string)ViewState["title"];
else
return string.Empty;
}
set { ViewState["title"] = value; }
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.Design;
using System.ComponentModel;
using CSLib.Web.UI;
using System.Globalization;
namespace CSLib.Web.UI.CSControls.Design
{
public class ContainerDesigner : System.Web.UI.Design.ContainerControlDesigner
{
private Container _ctrl = null;
private string _content = string.Empty;
public override void Initialize(IComponent component)
{
if (component is Container)
_ctrl = (Container)component;
else
throw new Exception("Bad Control");
base.Initialize(component);
}
public override bool AllowResize
{
get
{
return false;
}
}
public override string GetDesignTimeHtml(DesignerRegionCollection regions)
{
EditableDesignerRegion RegionContent = new EditableDesignerRegion(this, "Content");
regions.Add(RegionContent);
mis à part que la fonction fait appell à ControlDesigner.PlaceHolderDesignTimeHtmlTemplate, malheureusement reflector n'a pas voulu me dire ce que cela vaut :(
mais le truc c'est que les zones éditables sont une nouveautés dans VS2005 pour l'instant j'ai pas trouvé d'articles la dessus (il y a 3/4 mois), ce qu'il faut savoir c'est qu'il faut mettre un attribut ayant la valeur
DesignerRegion.DesignerRegionAttributeName étant égale à n sur l'element que tu veux editer
Je dis égale à n car on a la possibilité de mettre plusieurs zones éditables pour ensuite les recuperer plus loin :)
j'espere que ca t'aidera, sinon envoie moi un message privée et je te répondrais en te donnant mon adresse msn ce sera plus simple (on mettra bien sur la solution finale ici ;))