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

时间:2008-01-02 10:48:28  来源:站长资讯收集整理  作者:

 [
  Bindable(true), Category("Appearance"), DefaultValue(""), Description("获取或设置文本框输入文本")
  ]
  public string Text {
  get {
  EnsureChildControls();
  return _textBox.Text;
  }
  set {
  EnsureChildControls();
  _textBox.Text = value;
  }
  }
  // 实现事件属性结构
  public event EventHandler Submit {
  add {
  Events.AddHandler(EventSubmitKey, value);
  }
  remove {
  Events.RemoveHandler(EventSubmitKey, value);
  }
  }
  // 实现OnSubmit
  protected virtual void OnSubmit(EventArgs e) {
  EventHandler SubmitHandler = (EventHandler)Events[EventSubmitKey];
  if (SubmitHandler != null) {
  SubmitHandler(this, e);
  }
  }

  // 实现Submit事件引发的事件处理程序  

private void _button_Click(Object source, EventArgs e) {
  OnSubmit(EventArgs.Empty);
  }
  // 重写ICompositeControlDesignerAccessor接口的RecreateChildContrls方法
  protected override void RecreateChildControls() {
  EnsureChildControls();
  }
  //重写CreateChildControls方法,将子控件添加到复合控件中
  protected override void CreateChildControls() {
  Controls.Clear();
  _button = new Button();
  _textBox = new TextBox();
  _button.ID = "btn";
  _button.Click += new EventHandler(_button_Click);
  this.Controls.Add(_button);
  this.Controls.Add(_textBox);
  }
  //重写Render方法,呈现控件中其他的HTML代码
  protected override void Render(HtmlTextWriter output) {
  output.AddAttribute(HtmlTextWriterAttribute.Border, "0px");
  output.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "5px");
  output.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0px");
  output.RenderBeginTag(HtmlTextWriterTag.Table);
  output.RenderBeginTag(HtmlTextWriterTag.Tr);
  output.RenderBeginTag(HtmlTextWriterTag.Td);
  _textBox.RenderControl(output);
  output.RenderEndTag();
  output.RenderBeginTag(HtmlTextWriterTag.Td);
  _button.RenderControl(output);
  output.RenderEndTag();
  output.RenderEndTag();
  output.RenderEndTag();
  }
  }
  }

  如上代码所示,复合控件CompositeEvent中包含两个属性:Text和ButtonText.前者用于获取或者设置文本框中的文本内容,后者用于获取或者设置按钮的显示文本。另外,复合控件类中还实现了一个Submit事件。相关重要逻辑包括:

  第一、在重写CreateChildControls方法中,为子控件Button添加事件处理程序_button_Click.

  第二、和普通的自定义事件一样,为复合控件定义一个顶层事件Submit.这其中包括定义事件属性结构Submit,定义事件处理程序OnSubmit.

  第三、实现_button_Click事件处理程序,调用顶层事件Submit的事件处理程序OnSubmit.

  下面是为测试复合控件CompositeEvent而创建的Default.ASPx文件代码。

   在以上应用中,当用户单击"提交"按钮之后,将引发demo1_Submit处理程序的执行,由此显示文本框输入内容。

文章评论

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