17. november 2004 - 08:36Der er
12 kommentarer og 2 løsninger
Custom control med events
Jeg sidder i en situation hvor jeg skal bruge en custom control, nedarvet fra WebControl, der i sin Render()-metode udskriver en række LinkButtons. Disse LinkButtons skal alle sammen have den samme "OnClick" metode tilknyttet, som jeg ønsker at kunne sætte når jeg instansiere min nye custom control.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du skal have oprettet en public string OnLinkButton som refererer til din property der bliver sat på aspx-siden. Dernæst kobler du en eventhandler på på denne måde:
dinLinkButton.Click += new EventHandler(this.OnLinkButtonLink);
sad lige og læse det igennem igen... din "SomeMethod", er den erklæret på din aspx-side eller inde i selve kontrollen?
Hvis det først er tilfældet bliver det vist lidt mere kompliceret, for så skal du have fat i typen på den side kontrollen bliver sat ind på - og nej, man kan ikke bare bruge Page-propertyen, da den bare giver en reference til en System.Web.UI.Page-type :/
det virker halvvejs, idet der faktisk renderes en linkbutton og der kommer en runtime fejl hvis du sætter OnSjovAction="MetodeNavnDerIkkeFindes" i .aspx filen...
eventhandleren bliver bare ikke "overført" rigtigt til min LinkButton, idet der intet sker når jeg klikker på den, andet end at siden loades igen. ( min SomeMethod indeholder en Response.Write("snask"), men der kommer ingen snask på skærmen )
nu har i jo nærmest dækket det hele af i bidder her, men i kan lige få generelt eksempel her - inklusiv customargument - hvis det kan hjælpe.
mvh
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;
namespace EXP2 { // en side til test public class LinkList : System.Web.UI.Page { protected HtmlForm Form1;
private void Page_Load(object sender, System.EventArgs e) { LinkListControl ll = new LinkListControl(); ll.LinkClick += new LinkClickEventHandler(ll_LinkClick); Form1.Controls.Add(ll); }
private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); }
private void ll_LinkClick(object sender, LinkClickEventArgs e) { Response.Write(String.Format("Der er klikket på {0} med index {1}", e.Link, e.LinkIndex)); } }
public delegate void LinkClickEventHandler(object sender, LinkClickEventArgs e);
public class LinkClickEventArgs : EventArgs { private string link; private int linkIndex;
public string Link { get{return link;} }
public int LinkIndex { get{return linkIndex;} } public LinkClickEventArgs(string link, int linkIndex) { this.link = link; this.linkIndex = linkIndex; } }
// og så kontrollen public class LinkListControl : WebControl, INamingContainer { // bare lige for nemheds skyld private string[] links = {"hej","med","dig","du","gamle"};
protected object EventClicked = new object();
public event LinkClickEventHandler LinkClick { add{Events.AddHandler(EventClicked, value);} remove{Events.RemoveHandler(EventClicked, value);} }
jeg mangler virkelig et eller andet godt råd ... :)
Synes godt om
Ny brugerNybegynder
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.