¦pªGn¦b¦Ûq±±¨î¶µ¤¤¦A²K¥[¤l±±¨î¶µ¡AÀ³¼g¦bþùØ¡H¤Snª`·N¤°»ò¡H
¤@¡Boverride void CreateChildControls()
(¤@)¤l±±¥ó¼g¦b³oùئ³¤°»ò¦n³B¡H
¥iª½±µ¥[¤JASP.NETªº±±¥ó(¤]´N¬O<ASP:XXX>)¡A©Ò¦³ASP.NETªº±±¥ó¤¤ªº¨Æ¥ó.NETFrameWork·|¦Û¤vÀ°§A¥[¤J¡A³Ì°ò¥»ªº´N¬OPostBack¡BValidate....ªº¨º¨ÇJavascript¡A³oÓÀuÂI´N°÷¤F¡C
¦pªGn¶Ç¤l±±¥óªºÈ¥X¥h¡A¥²¶·¦boverride void OnLoad(EventArgs e)¤¤¨ú±o¡C
(¤G)¤l±±¥ó¼g¦b³oùئ³¤°»òÃa³B¡H
«Ü©_©ÇCreateChildControl¨Æ¥ó¡Aº¦¸¶i¤J¶±®É¡A¬Oµo¥Í¦bPage_Load¤§«á¡A¦ý¬O·íPostBack¦^¨Ó®É¡A«o¬Oµo¥Í¦bPage_Load¤§«e¡C
©Ò¥H¥~³¡¤Þ¥Îªº¶±¡A¦pªGn³z¹L¦Ûq±±¥ó¤½¶}ªºÄݩʡA§ïÅÜCreateChildControl¤¤¥[¤Jªº¤l±±¥ó(ÄݩʡBÅã¥Ü©ÎÁôÂÃ...)¡A´N¤£¯à¼g¦bPage_Load¡A§_«hPostBack¦^¨Ó¡A¥~³¡³]ªº·sÄݩʷ|µL®Ä¡C
©Ò¥H¦pªG¥~³¡¤Þ¥Î¶±n§ïÅܦ¹³Bªº¤l±±¥ó¡A¼g¦bPage_Init¡A´N¤£©ÈPoatBack¦^¨Ó¤SÅܦ^¹w³]È¡C·íµM¦pªG§A¨S¦³¤ÞµoPostBack¨Æ¥ó¡A¨º´N¥i¥H¼g¦bPage_LoadµL©Ò¿×¡C
¤G¡Boverride void RenderChildren or Render(HtmlTextWriter output)
(¤@)¤l±±¥ó¼g¦b³oùئ³¤°»ò¦n³B¡H
©Ò¦³¤½¶}ÄݩʡA¦b³Ì«á¤~¥Í®Ä¡A©Ò¥H¥~³¡¤Þ¥Î¶±n§ïÅܦÛq±±¥ó¤¤ªºÄݩʡA¼g¦bþùØÀ³¸Ó³£¯à³Q¦Ûq±±¥ó¦¬¨ì¡C
(¤G)¤l±±¥ó¼g¦b³oùئ³¤°»òÃa³B¡H
©Ò¦³¤l±±¥ó³£±o¤â°Ê¼gHTML Code¥sHtmlTextWriter¥h¿é¥X¡A«D±`³Â·Ð¡A¦Ó¥B©Ò¦³javascript¨Æ¥ó³£n¦Û¤v¼g¡A¦A¥[¨ì¤l±±¥óªºHtml Code¤¤¡An¦³¤@ÂI¥\¤O¥B«D±`¶O®É¡C
Yn¶ÇÈ¡A¦pªG¤º³¡¦³SendªºButton¡A¥i¥H¦Û¤v¼g¨Æ¥ó¸Ñ¨M(¦ý¦Ûq±±¨î¶µ¡A³q±`¥u¬O¶±ªº¤@³¡¤À¡A¦h¥b¤£t³dSendºô¶)
¦pªG¨S¦³SendªºButton¡A´Nn¹ê§@IPostBackDataHanler¡A¥~³¡¶±¤~¦¬±o¨ì¡A¦Ó³oÓ¤¶±¹ê¦b¬O¦³ÂI°Q¹½¡A¤U±ªº¨Ò¤l¤¤·|»¡©ú¡C
¤l±±¥ón¼g¦bþùØ¡H¦U¦³§Q±Í¡A¨Ì¥Î³~¦Û¦æ§PÂ_¤F¡C
¥H¤U¬O¡G±±¨î¶µ«Ø¥ß¦ì¸m»P¶ÇȪº½d¨Ò
½d¨Ò³sµ²¡G¦ÛqEmail±±¨î¶µ
¦Ûq±±¨î¶µµ{¦¡½X
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
using System.Drawing;
[assembly: TagPrefix("Longer.WebControls","LWC")]
namespace Longer.WebControls
{
[ToolboxBitmap(typeof(SimpleEmailControl), "SimpleEmailControl.bmp")]
[DefaultProperty("Type")]
[ToolboxData("<{0}:SimpleEmailControl runat=server></{0}:SimpleEmailControl>")]
public class SimpleEmailControl : WebControl, INamingContainer, IPostBackDataHandler
{
#region private properities
private string EmailReg = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
private string _Sender = string.Empty;
private string _ReCeiver = string.Empty;
private Color _EmailBackColor = Color.White;
private Color _SenderBackColor = Color.White;
private string _ValidationGroup = string.Empty;
private string _PostBackEmailValue = string.Empty;
private TextBox EMailTbx = new TextBox();
/// <summary>
/// ¨ú±o¦¬¥óªÌ¤Î±H¥óªÌ©m¦W
/// </summary>
private String SenderAndReCeiver
{
//(¹ê§@IPostBackDataHandler®É¨Ï¥Î)
get
{
string s = (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
}
set { ViewState["Text"] = value; }
}
#endregion
public SimpleEmailControl()
{
}
#region Override Method
protected override void OnLoad(EventArgs e)
{
//(ª`·N)==>CreateChildControls¤¤ªºEMail¤å¦r¤è¶ôÈn¦bOnLoad®É¨úÈ¡A
//§_«hPage²Ä¤@¦¸PostBack·|¨ú¤£¨ìÈ
if (Page.IsPostBack)//PostBack®É¤~¨úÈ¡A§_«h¨Ï¥Î¥~³¡µ¹ªº¹w³]È
this._PostBackEmailValue = this.EMailTbx.Text;
base.OnLoad(e);
}
protected override void CreateChildControls()
{
//(ª`·N)==>¦b¦¹³B¥[¤JEMail¡A¬°ªº¬O¨Ï¥ÎÅçÃÒ¶µ¡A
//¦ýEmailBackColorÄݩʡA´N¥²¶·¦bPage_Init¤¤³]©w¤~¦³®Ä
Literal txt = new Literal();
txt.Text = "¦¬¥óªÌ«H½c¡G";
EMailTbx.Width =300;
EMailTbx.ValidationGroup = this._ValidationGroup;
EMailTbx.Text = this._PostBackEmailValue;
EMailTbx.ID = "REMailTbx";// ¤£¥i¥ÎÅܼÆ;
EMailTbx.BackColor = this.EmailBackColor;
RequiredFieldValidator validA = new RequiredFieldValidator();
validA.ID = "EmailRequiredFieldValidator";
validA.ControlToValidate = EMailTbx.ID;
validA.ValidationGroup = this._ValidationGroup;
validA.ErrorMessage = "*";
validA.Display = ValidatorDisplay.Dynamic;
RegularExpressionValidator validB = new RegularExpressionValidator();
validB.ID = "EmailRegularValidator";
validB.ControlToValidate = EMailTbx.ID;
validB.ValidationGroup = this._ValidationGroup;
validB.ErrorMessage = "«H½c®æ¦¡¿ù»~";
validB.Display = ValidatorDisplay.Dynamic;
validB.ValidationExpression = this.EmailReg;
Controls.Add(txt);
Controls.Add(EMailTbx);
Controls.Add(validA);
Controls.Add(validB);
base.CreateChildControls();
}
protected override void Render(HtmlTextWriter output)
{
if (!(Site == null) && Site.DesignMode)
{
output.Write(string.Format("<font size='2' color='navy' face='arial'>[ \" EMailControl: {0}\" ]</font>
", this.ID));
output.Write("<font size='1' color='black' face='arial'> ¤£¤ä´©¦bVS.NET³]p¤¶±Åã¥Ü</font>
");
}
else
{
//»Ý¹ê§@IPostBackDataHandler¡APostBack¤~¯à§ì¨ì¤å¦r¤è¶ôÈ
//(ª`·N)==>¹ê§@IPostBackDataHandler¡An¶Ç¥XȪº±±¥óID³£¥²»Ý¨Ï¥Îthis.UniqueID¡A¤~¯à§ì±o¨ì¡C
//¦hÓ±±¥óID¤]³£¥Îthis.UniqueID¡A·|¥H,¸¹¤À¶}¦U±±¥óÈ
string patten="<INPUT type= 'text' name = '{0}' id='{0}' maxlength='30' value = '{1}'"
+" style=\"width:100px;background-color:"+System.Drawing.ColorTranslator.ToHtml(this._SenderBackColor)+";\" >";
output.Write(string.Format("±H¥óªÌ©m¦W¡G" + patten, this.UniqueID, this._Sender));
output.Write(string.Format(" ¦¬¥óªÌ©m¦W¡G" + patten, this.UniqueID, this._ReCeiver));
}
base.Render(output);
}
#endregion
#region IPostBackDataHandler ¦¨û
public delegate void EmailSend(object sender,EMailArgs e);
public event EmailSend OnEmailSend;
/// <summary>
/// Render()¤¤¤§¤l±±¥ó¶Ç°e¥X¨ÓªºÈ¡A¥BpostCollection¥u»`¶°ID¬Othis.UniqueID±±¥óªºÈ
/// (ª`·N)==>CreateChildContrl()¤¤ªº±±¥óȳoùا줣¨ì
/// </summary>
/// <param name="postDataKey"></param>
/// <param name="postCollection"></param>
/// <returns></returns>
bool IPostBackDataHandler.LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
String presentValue = SenderAndReCeiver;//¤§«eªºÈ
//(ª`·N)==>postCollection¥u»`¶°ID¬Othis.UniqueID±±¥óªºÈ
String postedValue = (string)postCollection[postDataKey];
if (postedValue != null)
{
if (!postedValue.Equals(presentValue))
{
SenderAndReCeiver = postedValue;
return true;
}
}
return false;
}
void IPostBackDataHandler.RaisePostDataChangedEvent()
{
EMailArgs arg = new EMailArgs();
arg.Reciver = this.ReCeiver;
arg.Sender = this.Sender;
arg.EMail = this._PostBackEmailValue;
doEmailSend(arg);
}
private void doEmailSend(EMailArgs e)
{
if (null != OnEmailSend)
OnEmailSend(this, e);
}
#endregion
#region Public Properties
/// <summary>
/// «H½c¤å¦r¤è¶ôI´º¦â
/// </summary>
[Bindable(true)]
[Category("«H½cÄÝ©Ê")]
[DefaultValue(typeof(Color), "White")]
[Description("«H½c¤å¦r¤è¶ôI´º¦â")]
[Localizable(true)]
public Color EmailBackColor
{
get { return _EmailBackColor; }
set { _EmailBackColor = value; }
}
/// <summary>
/// «H½c¤å¦r¤è¶ôI´º¦â
/// </summary>
[Bindable(true)]
[Category("«H½cÄÝ©Ê")]
[DefaultValue(typeof(Color), "White")]
[Description("±H¥óªÌ¤å¦r¤è¶ôI´º¦â")]
[Localizable(true)]
public Color SenderBackColor
{
get { return _SenderBackColor; }
set { _SenderBackColor = value; }
}
/// <summary>
/// ¶±ButtonÅçÃÒ¸s²Õ¦WºÙ(ValidationGroup)
/// </summary>
[Bindable(true)]
[Category("«H½cÄÝ©Ê")]
[DefaultValue("ValidationGroup")]
[Description("«ü©wValidationGroup¦WºÙ")]
[Localizable(true)]
public string ValidationGroup
{
get { return _ValidationGroup; }
set { _ValidationGroup = value; }
}
/// <summary>
/// ¨ú±o¦¬¥óªÌ«H½c
/// </summary>
[Bindable(true)]
[Category("«H½cÄÝ©Ê")]
[DefaultValue("")]
[Description("¨ú±o¦¬¥óªÌ«H½c")]
[Localizable(true)]
public string EMail
{
get { return this._PostBackEmailValue; }
set { this._PostBackEmailValue = value; }
}
/// <summary>
/// ¨ú±o±H¥óªÌ©m¦W
/// </summary>
[Bindable(true)]
[Category("«H½cÄÝ©Ê")]
[DefaultValue("")]
[Description("¨ú±o±H¥óªÌ©m¦W")]
[Localizable(true)]
public String Sender
{
get
{
this._Sender = (SenderAndReCeiver != string.Empty) ? SenderAndReCeiver.Split(',')[0] : string.Empty;
return this._Sender;
}
set { this._Sender = value; }
}
/// <summary>
/// ¨ú±o¦¬¥óªÌ©m¦W
/// </summary>
[Bindable(true)]
[Category("«H½cÄÝ©Ê")]
[DefaultValue("")]
[Description("¨ú±o±H¥óªÌ©m¦W")]
[Localizable(true)]
public String ReCeiver
{
get
{
this._ReCeiver = (SenderAndReCeiver != string.Empty) ? SenderAndReCeiver.Split(',')[1] : string.Empty;
return this._ReCeiver;
}
set { this._ReCeiver = value; }
}
#endregion
}
/// <summary>
/// ¨Æ¥óArgumentÃþ§O
/// </summary>
public class EMailArgs:EventArgs
{
public string EMail= string.Empty;
public string Sender = string.Empty;
public string Reciver = string.Empty;
public EMailArgs()
{
}
}
}
¤Þ¥Î¶±aspx
<%@ Register Assembly="SimpleEmailControl" Namespace="Longer.WebControls" TagPrefix="LWC" %>
<LWC:SimpleEmailControl ID="SimpleEmailControl1" runat="server" ValidationGroup="emailgroup" />
<br />
<asp:Button ID="Button1" runat="server" Text="°e¥X" ValidationGroup="emailgroup"
onclick="Button1_Click" />
<br />
<table>
<tr>
<td><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></td>
<td><asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></td>
</tr>
</table>
«áºÝµ{¦¡½Xaspx.cs
protected void Page_Init(object sender, EventArgs e)
{
//CreateChildControls¨Æ¥ó¤¤ªº¤l±±¨î¶µÄݩʤ@©wn¦bPage_Init³]©w¡A§_«hPostBack«á¡A·|«¦^¹w³]È
SimpleEmailControl1.EmailBackColor = System.Drawing.ColorTranslator.FromHtml("#E7FAAB");
//³]©w»PButton1¬Û¦PªºÅçÃÒ¸s²Õ
SimpleEmailControl1.ValidationGroup = Button1.ValidationGroup;
//if (!IsPostBack)
SimpleEmailControl1.EMail = "aaa@bbb.ccc";
//¥ÑSimpleEmailControl¦Û¤v²£¥Íªº¨Æ¥ó¨úÈ(¥i°µ¥i¤£°µ)
SimpleEmailControl1.OnEmailSend+=new Longer.WebControls.SimpleEmailControl.EmailSend(SimpleEmailControl1_OnEmailSend);
}
protected void Page_Load(object sender, EventArgs e)
{
//Render¨Æ¥ó¤¤ªº¤l±±¨î¶µÄÝ©Ên¦b³oùس]©w§Y¥i
SimpleEmailControl1.SenderBackColor = System.Drawing.ColorTranslator.FromHtml("#E7FAAB");
if (!IsPostBack)
{
SimpleEmailControl1.Sender = "¤ý¤p©ú";
SimpleEmailControl1.ReCeiver = "§õ¤j¦P";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = string.Format("¥~³¡«ö¶s¨Æ¥ó±µ¦¬ªºÈ¡G
±H¥óªÌ©m¦W¡G{0}
¦¬¥óªÌ©m¦W¡G{1}
¦¬¥óªÌEmail¡G{2}"
, SimpleEmailControl1.Sender
, SimpleEmailControl1.ReCeiver
, SimpleEmailControl1.EMail);
}
void SimpleEmailControl1_OnEmailSend(object sender, Longer.WebControls.EMailArgs e)
{
Label2.Text = string.Format("SimpleEmailControlªºEmailSend¨Æ¥ó¶Ç¥XªºÈ¡G
±H¥óªÌ©m¦W¡G{0}
¦¬¥óªÌ©m¦W¡G{1}
¦¬¥óªÌEmail¡G{2}", e.Sender, e.Reciver, e.EMail);
}