ASP.NET 2.0 服务器控件之复合控件事件

时间:2008-03-27 13:30:12  来源:  作者:
4UN第一天空网络

 [ 4UN第一天空网络
  Bindable(true), Category("Appearance"), DefaultValue(""), Description("获取或设置文本框输入文本") 4UN第一天空网络
  ] 4UN第一天空网络
  public string Text { …… } // 实现事件属性结构 4UN第一天空网络
  public event EventHandler Submit 4UN第一天空网络
  { 4UN第一天空网络
  add { 4UN第一天空网络
  Events.AddHandler(EventSubmitKey, value); 4UN第一天空网络
  } 4UN第一天空网络
  remove { 4UN第一天空网络
  Events.RemoveHandler(EventSubmitKey, value); 4UN第一天空网络
  } 4UN第一天空网络
  } 4UN第一天空网络
  // 实现OnSubmit 4UN第一天空网络
  protected virtual void OnSubmit(EventArgs e) { 4UN第一天空网络
  EventHandler SubmitHandler = (EventHandler)Events[EventSubmitKey]; 4UN第一天空网络
  if (SubmitHandler != null) { SubmitHandler(this, e); } 4UN第一天空网络
  } 4UN第一天空网络
  // 删除_button_Click 4UN第一天空网络
  // 重写ICompositeControlDesignerAccessor接口的RecreateChildContrls方法 4UN第一天空网络
  protected override void RecreateChildControls() { …… } 4UN第一天空网络
  //重写CreateChildControls方法,将子控件添加到复合控件中 4UN第一天空网络
  protected override void CreateChildControls() { 4UN第一天空网络
  Controls.Clear(); 4UN第一天空网络
  _button = new Button(); 4UN第一天空网络
  _textBox = new TextBox(); 4UN第一天空网络
  _button.ID = "btn"; 4UN第一天空网络
  _button.CommandName = "Submit"; 4UN第一天空网络
  this.Controls.Add(_button); 4UN第一天空网络
  this.Controls.Add(_textBox); 4UN第一天空网络
  } 4UN第一天空网络
  // 重写OnBubbleEvent方法,执行事件冒泡 4UN第一天空网络
  protected override bool OnBubbleEvent(object source, EventArgs e) { 4UN第一天空网络
  bool handled = false; 4UN第一天空网络
  if (e is CommandEventArgs) { 4UN第一天空网络
  CommandEventArgs ce = (CommandEventArgs)e; 4UN第一天空网络
  if (ce.CommandName == "Submit") { 4UN第一天空网络
  OnSubmit(EventArgs.Empty); 4UN第一天空网络
  handled = true; 4UN第一天空网络
  } 4UN第一天空网络
  } 4UN第一天空网络
  return handled; 4UN第一天空网络
  } 4UN第一天空网络
  //重写Render方法,呈现控件中其他的HTML代码 4UN第一天空网络
  protected override void Render(HtmlTextWriter output) { …… } 4UN第一天空网络
  } 4UN第一天空网络
  }

  本例的CompositeEvent类与上小节中的CompositeEvent类实现了同一功能。就控件呈现方面,两个类没有任何差别,差别主要表现在对于复合控件的事件实现方面。差别一:在本例的CreateChildControl方法中,为子控件_button设置了CommandName属性,其属性值为Submit.差别二:删除了_button_Click事件处理程序。差别三:重写了Control基类的OnBubbleEvent方法,检查事件参数是否是CommandEventArgs类的实例。如果是,使用事件参数的CommandName成员确定是否需要引发事件处理程序 OnSubmit,并返回true.4UN第一天空网络

  小结4UN第一天空网络

  本文重点介绍了复合控件的事件实现方法,并通过典型示例说明了这些实现方法的具体应用。总体而言,为复合控件实现事件并不是特别困难的事情。关键是开发人员必须在领会为普通控件实现事件的基础之上,掌握包含法和冒泡法的实现要点。4UN第一天空网络

文章评论

共有 位天空网友发表了评论 查看完整内容

特别推荐
  • 文字广告
  • 文字广告
  • 文字广告
  • 文字广告
站长黑板报