Avatar billede finger Nybegynder
03. marts 2004 - 14:09 Der er 1 kommentar og
1 løsning

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();       
        }
    }
}
--------------------
Avatar billede snepnet Nybegynder
04. marts 2004 - 17:49 #1
Der findes en medfølgende serverkontrol (Table), som i forvejen har designunderstøttelse (på den måde at du i designeren kan tilføje en collection af rows, og for hvert row en collection af cells).
Hvis du ønsker at tilføre den medfølgende kontrol noget ekstra vil jeg foreslå at du laver en specialisering af Table således :

public class SomeSpecialTable : System.Web.UI.WebControls.Table
{
}

Den vil give dig samme designersuppert som den allerede eksisterende, og du har så muligheden for at tilføre noget særligt hvis du skulle have behov for det.
Avatar billede finger Nybegynder
05. marts 2004 - 09:33 #2
Tak for det.

jeg fandt dog præcis det jeg skulle bruge på
http://www.codeproject.com/aspnet/composite_controls.asp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester