选择显示字体大小

asp.net设计控件净化网站语言(3)

     现在来看复合控件本身。复合控件有两个类,用两个独立的vb源文件实现,分别是composite.vb和checkevent.vb
  
  【composite.vb
  
  imports system
  imports system.web
  imports system.web.ui
  imports system.web.ui.webcontrols
  imports system.xml
  imports system.collections
  
  namespace customcontrols
  public class composite
  inherits control
  implements inamingcontainer
  private _filename as string = "bad_words.xml"
  private label as label
  private box1 as textbox
  
  public property filename() as string
  get
  return _filename
  end get
  set
  _filename = value
  end set
  end property
  
  ' 以用户提交的文本内容为输入参数。如果用户提交的内容包含攻击性言辞,
  ' 则返回修改后的版本,
  ' 否则,直接返回原始的文本。
  public function checkstring(inputstring as string) as string
  dim alwordlist as new arraylist
  dim xmldocpath as string = mappathsecure("bad_words.xml")
  dim xmlreader as xmltextreader = new xmltextreader(xmldocpath)
  dim element as string
  dim output as string
  dim asterisks as string = "*************************"
  
  ' 将定义攻击性言辞的xml文件内容读入到一个arraylist
  while (xmlreader.read())
  if xmlreader.nodetype=xmlnodetype.text then
  alwordlist.add(xmlreader.value)
  end if
  end while
  xmlreader.close()
  
  ' 检查用户提交的文本内容,将攻击性言辞替换为适当数量的星号
  for each element in alwordlist
  inputstring=inputstring.replace(element,
  asterisks.substring(1, (element.length)))
  next
  
  return inputstring
  
  end function
  
  public property text() as string
  get
  ' 该方法首先检查childcontrolscreated属性的当前值。如果该值是false,
  ' 则调用createchildcontrols方法
  ensurechildcontrols()
  return label.text
  end get
  set
  ensurechildcontrols()
  label.text = value
  end set
  end property
  
  public event check as checkeventhandler
  
  protected overridable sub oncheck(ce as checkeventargs)
  raiseevent check(me, ce)
  end sub
  
  '创建composite控件的子控件
  protected overrides sub createchildcontrols()
  
  controls.add(new literalcontrol("<h3>请在下面输入文字内容: "))
  
  '文本输入框
  dim box1 as new textbox()
  box1.text = ""
  controls.add(box1)
  
  controls.add(new literalcontrol("</h3>"))
  
  '按钮
  dim button1 as new button()
  button1.text = "提交"
  controls.add(new literalcontrol("<br>"))
  controls.add(button1)
  
  ' 将一个事件句柄加入新创建的按钮对象
  addhandler button1.click, addressof me.buttonclicked
  
  controls.add(new literalcontrol("<br><br>"))
  label = new label()
  label.height = unit.pixel(50)
  label.width = unit.pixel(500)
  label.text = ""
  controls.add(label)
  end sub
  
  protected overrides sub onprerender(e as eventargs)
  ctype(controls(1), textbox).text = ""
  end sub
  
  private sub buttonclicked(sender as [object], e as eventargs)
  oncheck(new checkeventargs(ctype(controls(1), textbox).text,
  checkstring(ctype(controls(1), textbox).text)))
  end sub
  end class
  end namespace
  
    上面代码的主要任务是:
  
    ⑴ 首先导入必要的名称空间,声明当前类所属的名称空间。
  
    ⑵ 接下来定义composite的主体。composite从最基本的control类继承,另外还要实现inamingcontainer接口。inamingcontainer接口允许composite控件将事件转发到它的button子控件。
  
    ⑶ 用createchildcontrols方法(而不是oninit或构造函数)创建子控件。
  
    ⑷ composite控件没有显露出button子控件的click事件。相反,它处理了click事件,并抛出自定义事件check。
  
    ⑸ composite控件显露了下列公用属性:text,即label子控件的text属性值;filename,允许获取和设置定义攻击性词语的xml文件的名字
  
    ⑹ 主要的检查功能由checkstring方法实现,它的输入参数是一个文本字符串。checkstring方法从xml文件读取禁用的词语,放入一个数组列表(arraylist),然后检查指定的字符串是否包含禁用的词语。所有“攻击性”的词语将被适当数量的“*”替代。
  
    ⑺ onprerender清除文本框子控件的文本。
  
    ⑻ 当用户点击按钮,buttonclicked开始执行。buttonclicked调用oncheck子过程,传入适当的参数(一个新建的checkeventargs对象,创建checkeventargs对象的参数是检查前和检查后的文本)。oncheck随后触发一个事件,该事件将由.aspx页面中的代码处理。
  
  【checkevent.vb
  
  ' 包含定制事件数据类checkeventargs的代码.
  ' 另外还定义了check事件的事件句柄
  imports system
  namespace customcontrols
  public class checkeventargs
  inherits eventargs
  private _match as boolean = false
  
  public sub new(string1 as string, string2 as string)
  if string1=string2 then
  _match = true
  end if
  end sub
  
  public readonly property match() as boolean
  get
  return _match
  end get
  end property
  end class
  
  public delegate sub checkeventhandler(sender as object, ce as checkeventargs)
  end namespace
  
    checkeventargs的构造函数是两个字符串,根据字符串的值设置相应的匹配标记_match。另外,上面的代码还定义了checkeventhandler事件句柄。
  
    编写好上面的代码后,如果你没有安装ide,用下面的命令执行编译即可:
  
  vbc /t:library /out:./bin/customcontrols.dll /r:system.dll /r:system.web.dll
  /r:system.drawing.dll /r:system.data.dll /r:system.xml.dll *.vb
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons