您的位置:首页 > 编程语言 > ASP

ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡

2014-03-12 19:24 525 查看
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡 CompositeControl 后篇 --事件冒泡



我们上一篇已经开发一个登录的组合控件,但是我们把控件的事件的这个问题没有解决,现在我们就来看看这个

问题。

因为我们的组合控件Login是由一些已经存在的服务器控件的组合的,这样就省却了我们很多的麻烦,上篇中我

们已经把子控件的一些属性,如Text等,显示呈现为了组合控件的属性。我们将之称为“属性的冒泡”(我自己这样认为

的)。

我们现在来想下:其实我们点击“提交”按钮,我们就想把控件中信息发送给服务器,然后验证。即,我们点击

的是“提交”按钮,但是触发的确实Login控件的验证事件。也就是说,我们应该把子控件-button的事件,上升冒泡成为

Login的事件。

现在我们就正式讲讲怎么来事件冒泡。

对于事件的一些步骤,大家应该还记得:

1。定义一个数据类,用来当发生事件时,我们把一些信息携带。在本控件中,当我们点击“提交”按钮时,我

们就把用户名和密码作为数据送到服务器。所以我们的数据类包含两个信息:如下:

Code

1 using System;

2 using System.Collections.Generic;

3 using System.Text;

4 using System.Web;

5 using System.Web.UI;

6 using System.Web.UI.WebControls;

7 using System.ComponentModel;

8

9 namespace LoginControl

10 {

11 public class Login:CompositeControl

12 {

13 #region 要组合的控件

14 Label lbUserName;

15 Label lbUserPassward;

16 TextBox txtUserName;

17 TextBox txtUserPassward;

18 Button submitButton;

19 #endregion

20

21

22 #region 重写方法CreateChildControls

23

24 protected override void CreateChildControls()

25 {

26 Controls.Clear();

27

28 //初始化控件lbUserName

29 lbUserName = new Label();

30 lbUserName.Text = "用户名:";

31 lbUserName.ID = "lbUserName";

32 //把控件添加到我们的组合控件中

33 Controls.Add(lbUserName);

34

35 //初始化控件lbUserPassward

36 lbUserPassward = new Label();

37 lbUserPassward.Text = "密 码:";

38 lbUserPassward.ID = "lbUserPassward";

39 Controls.Add(lbUserPassward);

40

41

42 txtUserName = new TextBox();

43 txtUserName.ID = "txtUserName";

44 txtUserName.Width = Unit.Percentage(60);

45 Controls.Add(txtUserName);

46

47 txtUserPassward = new TextBox();

48 txtUserPassward.ID = "txtUserPassward";

49 txtUserPassward.Width = Unit.Percentage(60);

50 Controls.Add(txtUserPassward);

51

52 submitButton = new Button();

53 submitButton.Text = "提交";

54 submitButton.CommandName = "Validate";

55 Controls.Add(submitButton);

56

57 ChildControlsCreated = true;

58 }

59 #endregion

60 #region 将组合的子控件的属性 呈现为 组合控件的属性

61

62 public string UserNameLabelText

63 {

64 get

65 {

66 EnsureChildControls();

67 return lbUserName.Text;

68 }

69 set

70 {

71 EnsureChildControls();

72 lbUserName.Text = value;

73 }

74 }

75

76 public string UserPasswardLabelText

77 {

78 get

79 {

80 EnsureChildControls();

81 return lbUserPassward.Text;

82 }

83 set

84 {

85 EnsureChildControls();

86 lbUserPassward.Text = value;

87 }

88 }

89

90 public string SubmitButtonText

91 {

92 get

93 {

94 EnsureChildControls();

95 return submitButton.Text;

96 }

97 set

98 {

99 EnsureChildControls();

submitButton.Text = value;

}

}

#endregion

#region 组合控件呈现的样式

protected override HtmlTextWriterTag TagKey

{

get

{

return HtmlTextWriterTag.Table;

}

}

protected override void RenderContents(HtmlTextWriter writer)

{

writer.RenderBeginTag(HtmlTextWriterTag.Tr);

writer.RenderBeginTag(HtmlTextWriterTag.Td);

lbUserName.RenderControl(writer);

writer.RenderEndTag();//td的结束

writer.RenderBeginTag(HtmlTextWriterTag.Td);

txtUserName.RenderControl(writer);

writer.RenderEndTag ();

writer.RenderEndTag ();//tr的结束

//***********************************************

writer.RenderBeginTag(HtmlTextWriterTag.Tr);

writer.RenderBeginTag(HtmlTextWriterTag.Td);

lbUserPassward .RenderControl(writer);

writer.RenderEndTag();//td的结束

writer.RenderBeginTag(HtmlTextWriterTag.Td);

txtUserPassward .RenderControl(writer);

writer.RenderEndTag();

writer.RenderEndTag ();//tr的结束

//***********************************************

writer.RenderBeginTag(HtmlTextWriterTag.Tr);

writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");

writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");

writer.RenderBeginTag(HtmlTextWriterTag.Td);

submitButton.RenderControl(writer);

writer.RenderEndTag ();

writer.RenderEndTag();//tr的结束

}

#endregion

#region 事件

private static readonly object ValidateEventKey = new object();

public event ValidateEventHandler ValidateUserInfoChanged

{

add

{

Events.AddHandler(ValidateEventKey, value);

}

remove

{

Events.RemoveHandler(ValidateEventKey, value);

}

}

protected virtual void OnValidateChanged(ValidateEventArgs args)

{

ValidateEventHandler handler = Events[ValidateEventKey] as ValidateEventHandler;

if (handler != null)

handler(this, args);

}

#endregion

#region 冒泡

protected override bool OnBubbleEvent(object source, EventArgs args)

{

bool handled = false;

CommandEventArgs ce = args as CommandEventArgs;

if (ce != null && ce.CommandName == "Validate")

{

handled = true;

string userName = this.txtUserName.Text;

string userPassward = this.txtUserPassward.Text;

//把信息输入

ValidateEventArgs ve = new ValidateEventArgs(userName, userPassward);

OnValidateChanged(ve);

}

return handled;

}

#endregion

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐