using System; using System.Workflow.Activities; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Compiler; using System.Text.RegularExpressions; using System.Net.Mail; namespace SendMailActivityLibrary ...{ publicclass ParametersValidator : ActivityValidator ...{ publicoverride ValidationErrorCollection ValidateProperties(ValidationManager manager, object obj) ...{ ValidationErrorCollection validationErrors =new ValidationErrorCollection(base.ValidateProperties(manager, obj)); SendMailActivity sendMailActivityToBeValidated = obj as SendMailActivity; if (sendMailActivityToBeValidated ==null) ...{ thrownew InvalidOperationException("Parameter obj is not of type SendMailActivity"); } if (!IsValidEmailAddress(sendMailActivityToBeValidated.To)) ...{ ValidationError CustomActivityValidationError =new ValidationError(String.Format("'{0}' is an Invalid destination e-mail address", sendMailActivityToBeValidated.To), 1); validationErrors.Add(CustomActivityValidationError); } if (!IsValidEmailAddress(sendMailActivityToBeValidated.From)) ...{ ValidationError CustomActivityValidationError = new ValidationError(String.Format("'{0}' is an Invalid source e-mail address", sendMailActivityToBeValidated.From), 1); validationErrors.Add(CustomActivityValidationError); } return validationErrors; //return base.ValidateProperties(manager, obj); } privatebool IsValidEmailAddress(string address) ...{ //throw new Exception("The method or operation is not implemented."); if (address ==null|| address.Length ==0) ...{ returntrue; } Regex rx =new Regex(@"[^A-Za-z0-9@-_.]", RegexOptions.Compiled); MatchCollection matches = rx.Matches(address); if (matches.Count >0) ...{ returnfalse; } int i = address.IndexOf('@'); if (i <=0|| i > address.Length -3) ...{ returnfalse; } if (address.IndexOf('@', i +1) >=0) ...{ returnfalse; } int j = address.LastIndexOf('.'); if (j >=0&& j <= i +1) ...{ returnfalse; } returntrue; } } }
6、添加代码文件(Code file),进行界面设计
using System; using System.Text; using System.ComponentModel; using System.Collections; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Design; using System.Workflow.ComponentModel.Compiler; using System.Workflow.ComponentModel.Serialization; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Workflow.Runtime; using System.Workflow.Activities; using System.Workflow.Activities.Rules; namespace SendMailActivityLibrary ...{ publicclass SendMailDesigner:ActivityDesigner ...{ SendMailActivity parentActivity; protectedoverridevoid Initialize(Activity activity) ...{ base.Initialize(activity); parentActivity = (SendMailActivity)activity; } protectedoverride Size OnLayoutSize(ActivityDesignerLayoutEventArgs e) ...{ returnnew Size(230, 100); } protectedoverridevoid OnPaint(ActivityDesignerPaintEventArgs e) ...{ Rectangle frameRect =new Rectangle(this.Location.X, this.Location.Y, this.Size.Width -5, this.Size.Height -5); Rectangle shadowRect =new Rectangle(frameRect.X +5, frameRect.Y +5, frameRect.Width, frameRect.Height); Rectangle pageRect =new Rectangle(frameRect.X +4, frameRect.Y +24, frameRect.Width -8, frameRect.Height -28); Rectangle titleRect =new Rectangle(frameRect.X +15, frameRect.Y +4, frameRect.Width /2, 20); Brush frameBrush =new LinearGradientBrush(frameRect,Color.DarkBlue,Color.LightBlue,45); e.Graphics.FillPath(Brushes.LightGray,RoundedRect(shadowRect)); e.Graphics.FillPath(frameBrush,RoundedRect(frameRect)); e.Graphics.FillPath(new LinearGradientBrush(pageRect,Color.White,Color.WhiteSmoke,45),RoundedRect(pageRect)); e.Graphics.DrawString(Activity.QualifiedName,new Font("Segoe UI",9),Brushes.White,titleRect); frameRect.Inflate(20,20); string textToDisplay=String.Format("To : '{0}' From : '{1}' Subject : '{2}' ",parentActivity.To,parentActivity.From,parentActivity.Subject); e.Graphics.DrawString(String.Format(textToDisplay,parentActivity.Subject),new Font("宋体",8),Brushes.Black,pageRect.X,pageRect.Y+15); } private GraphicsPath RoundedRect(Rectangle frame) ...{ GraphicsPath path=new GraphicsPath(); int radius=7; int diameter=radius*2; Rectangle arc=new Rectangle(frame.Left,frame.Top,diameter,diameter); path.AddArc(arc,180,90); arc.X=frame.Right-diameter; path.AddArc(arc,270,90); arc.Y=frame.Bottom-diameter; path.AddArc(arc,0,90); arc.X=frame.Left; path.AddArc(arc,90,90); path.CloseFigure(); return path; } } }