Hjælp til Custom Web Controls
Hejsa.Jeg er brand ny til at lave Custom Web Controls og har derfor en del problemer....
Et af de problemer som jeg ikke kan løse er at lave en ordentlig designerklasse til mon controls således at jeg kan bikse med den i designview.
Overordnet indeholder min control et htmltable med en række og flere celler indeholdende hyperlinks, som alt blive tilføjet runtime.
I designview kan jeg kun se selve min control men ikke indholdet. og hvis jeg forsøger at oprette hyperlinks til den designtime går det først rigtigt galt...
Jeg har sikkert gjort alverdensting som ma ikke skal, men jeg er på bar bund. Alee ideer modtages gerne.
-------------min control klasse--------------
using System;
using System.Drawing;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.ComponentModel;
namespace TestControls
{
/// <summary>
/// Summary description for FooterLinkBar.
/// </summary>
[Designer("TestControls.SampleDesigner, FooterLinkBar"),
ParseChildrenAttribute(false), PersistChildrenAttribute(true),
DefaultProperty("Text"), ToolboxData("<{0}:FooterLinkBar runat=server></{0}:FooterLinkBar>")]
public class FooterLinkBar : System.Web.UI.WebControls.WebControl
{
private HyperLink[] m_Links;
private string m_TabelHeight;
private string m_TabelWidth;
private Color m_TabelBackColor;
private Color m_TabelBorderColor;
private Color m_TabelForeColor;
[Bindable(true), Category("Appearance"), DefaultValue("")]
public HyperLink[] Links
{
get{return m_Links;}
set{m_Links = value;}
}
[Bindable(true), Category("Appearance"), DefaultValue("16")]
public string TabelHeight
{
get{return m_TabelHeight;}
set{m_TabelHeight = value;}
}
[Bindable(true), Category("Appearance"), DefaultValue("500")]
public string TabelWidth
{
get{return m_TabelWidth;}
set{m_TabelWidth = value;}
}
[Bindable(true), Category("Appearance"), DefaultValue("Yellow")]
public Color TabelBackColor
{
get{return m_TabelBackColor;}
set{m_TabelBackColor = value;}
}
[Bindable(true), Category("Appearance"), DefaultValue("Yellow")]
public Color TabelBorderColor
{
get{return m_TabelBorderColor;}
set{m_TabelBorderColor = value;}
}
[Bindable(true), Category("Appearance"), DefaultValue("Black")]
public Color TabelForeColor
{
get{return m_TabelForeColor;}
set{m_TabelForeColor = value;}
}
public FooterLinkBar()
{
}
protected override void CreateChildControls()
{
HtmlTable myTable = new HtmlTable();
myTable.Width = m_TabelWidth;
myTable.Height = m_TabelHeight;
myTable.BgColor = m_TabelBackColor.Name;
HtmlTableRow myRow = new HtmlTableRow();
if(m_Links != null)
{
foreach(HyperLink currentLink in m_Links)
{
HtmlTableCell myCell = new HtmlTableCell();
myCell.Align = "center";
myCell.BorderColor = m_TabelBorderColor.Name;
myCell.Style.Add("font", "Italic 8pt verdana");
currentLink.ForeColor = m_TabelForeColor;
myCell.Controls.Add(currentLink);
myRow.Cells.Add(myCell);
}
}
myTable.Rows.Add(myRow);
this.Controls.Add(myTable);
base.CreateChildControls();
}
/// <summary>
/// Render this control to the output parameter specified.
/// </summary>
/// <param name="output"> The HTML writer to write out to </param>
protected override void Render(HtmlTextWriter output)
{
this.Init +=new EventHandler(FooterLinkBar_Init);
base.Render(output);
}
private void FooterLinkBar_Init(object sender, EventArgs e)
{
this.EnsureChildControls();
}
}
}
---------------------------------------
---------------min designklasse----------
using System;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.UI.Design;
namespace TestControls
{
public class SampleDesigner : System.Web.UI.Design.ControlDesigner
{
public override string GetDesignTimeHtml()
{
FooterLinkBar myFooterLinkBar = (FooterLinkBar ) Component;
StringWriter sw = new StringWriter();
HtmlTextWriter tw = new HtmlTextWriter(sw);
HtmlTable myTable = new HtmlTable();
myTable.Width = myFooterLinkBar.TabelWidth;
myTable.Height = myFooterLinkBar.TabelHeight;
myTable.BgColor = myFooterLinkBar.TabelBackColor.Name;
HtmlTableRow myRow = new HtmlTableRow();
if(myFooterLinkBar.Links != null)
{
foreach(HyperLink currentLink in myFooterLinkBar.Links)
{
HtmlTableCell myCell = new HtmlTableCell();
myCell.Align = "center";
myCell.BorderColor = myFooterLinkBar.TabelBorderColor.Name;
myCell.Style.Add("font", "Italic 8pt verdana");
currentLink.ForeColor = myFooterLinkBar.TabelForeColor;
myCell.Controls.Add(currentLink);
myRow.Cells.Add(myCell);
}
}
myTable.Rows.Add(myRow);
myFooterLinkBar.Controls.Add(myTable);
myTable.RenderControl(tw);
myFooterLinkBar.RenderControl(tw);
return sw.ToString();
}
}
}
--------------------
