用户控件事件执行顺序
- 格式:doc
- 大小:43.00 KB
- 文档页数:8
《计算机程序设计基础》课后练习题1一.判断题(1)(错)事件过程由某个用户事件或系统事件触发执行,但不能被其他过程调用。
(2)(错)若X=2, Y=5,则表达式 Y-2>X AND X+2>Y 的结果为:True。
(3)(错)常量是指在程序运行过程中其值可以改变的那些量。
(4)(错,timer没有)VB工具箱中的所有控件都具有宽度(Width)和高度(Height)属性。
(5)(错)定义变量:Dim max,min as Single , 则max 和 min 的数据类型均为Single。
(6)(对)如果创建的菜单项的标题是一个减号“-”,则该菜单项显示为一条分隔线。
(7)(错)标准模块文件的扩展名是“*.VBP”。
(8)(错,都不能)定时器控件可以响应Click事件,但不能响应DbClick事件。
(9)(错)在默认情况下,数组下标下界的缺省值为1。
(10)(对)在使用字体对话框时,需要对其Flags属性先进行相应设置。
二.单选题(11)在Visual Basic中,表示鼠标单击事件的是 C 。
A)Activate B)DoubleClick C)Click D)MouseDown(12)用于设置计时器时间间隔的属性是 A 。
A)Interval B)Name C)Left D)Top(13)函数Int(10*Rnd)是在 D 范围内的整数。
A)[1,10] B)[1,10] C) [0,9) D)[0,9](14)Select case语句结构的结尾应使用 D 。
A)End B) End Case C) End Sub D) End Select(15)改变了容器的坐标系后,该容器的 A 属性值不会改变。
A)left B)scaleleft C)scaletop D)scalewidth(16)执行下列语句后,列表框中各表项顺序为 DList1.ClearFor i=1 to 4 : List1.AddItem i-1,0 :Next iA)B)C)D)(17)输入对话框InputBox的返回值的类型是 A 。
第1章基础1.什么是静态网页?什么是动态网页?静态网页就是用纯HTML代码编写的网页。
这些网页的代码是用一些编辑器输入的,或者是用一些网页设计程序生成的,保存为.html或.htm文件的形式。
设计完成之后,无论是哪个用户访问这个网页,在什么时候访问这个网页,以何种方式进入这个网页,它的显示都不会发生任何变化。
要对用户请求做出动态响应,就要使用动态网页,动态网页可以为不同的用户提供个性化的服务,而为了实现这种动态性,就需要进行程序设计。
2.简述你对的事件驱动机制的理解。
使用一个事件驱动编程模型。
该模型定义了一个事件序列,这些事件在页面的生命周期中被依次引发,顺序为Init →Load →控件事件→Unload对每个引发的事件,你可能需要完成一些任务。
可以在称为事件处理过程中编写代码。
例如,可以在Web页面的Init或Load事件中编写页面初始化代码。
Page_Init是页面的Init 事件的事件处理器,而page_Load是页面的Load事件的事件处理器。
3.简述页面的事件序列,事件触发时机及顺序。
4.IsPostBack的作用是什么?在page_Load的过程中,你可以读取或者重置页面的属性和控件的属性,根据IsPostBack属性判定页面是否为第一次被请求,执行数据绑定等等。
IsPostBack属性为false 表明页面是被第一次显示,为true表明页面被请求后返回(PostBack)的结果值。
5.怎样配置运行环境?(略)第2章C#语言基础1.怎样在程序中加入注释文本?可以使用服务器端注释在页面中包括注释,服务器端注释说明文档,也可防止服务器代码和静态内容执行或呈现。
服务器端注释以<%一开始,以一%>结束。
如下所示:<%-- 这是一个注释--%>在代码中用//做单行注释;用/* */作多行注释2.C#语言中有哪几种控制语句?●条件控制if else switch case●循环控制while do for foreach●跳转语句break continue3.在构造表达式时,怎样明确指定运算次序?见表2-8 运算符从高到低的优先级顺序4.指出下列语句中的语法错误int i;for (i = 1; i <= 10; i++){if ((i % 2) = 0)continue;Response.Write(i);}答:if ((i % 2) = 0)中要用==5.下列语句有哪些语法错误?string[] arr = new string[5]string[5] = 5th string.答:string[] arr = new string[5]string[5] = “hello”.语句缺少分号;字符串要用双引号””6.写一个程序,把字符串“Hello Word”以相反顺序输出<%@ Page Language="C#" %><%String s="Hello World";for (int i = s.Length-1;i>=0;i--){Response.Write(s[i]);}%>7.下面函数有什么错误?bool Write(){Response.Write("Text output from function.");}答:缺少reture语句。
winform事件触发的底层机制以WinForm事件触发的底层机制为标题,下面将详细介绍WinForm事件触发的底层机制以及其背后的工作原理。
在WinForm应用程序中,事件是一种重要的机制,用于响应用户的操作或系统内部的状态变化。
事件可以是用户点击按钮、输入文本、选择菜单等操作,也可以是系统发出的通知、警告等状态变化。
通过事件,应用程序能够实时地对用户操作或系统变化做出响应,提供良好的用户体验。
WinForm事件的底层机制主要由以下几个部分组成:事件源、事件处理器、事件参数和事件订阅。
事件源是指触发事件的对象,通常是用户界面中的控件,如按钮、文本框等。
每个控件都可以触发多个不同类型的事件,如点击事件、鼠标移动事件等。
事件处理器是事件的响应代码,它定义了当事件被触发时要执行的操作。
事件处理器是一个方法,通常由开发人员编写并与事件源相关联。
当事件源触发事件时,事件处理器将被调用执行。
事件参数是事件处理器接收到的信息,它包含了关于事件的详细信息,如触发事件的对象、事件发生的时间等。
事件参数是一个对象,它封装了事件相关的数据,并作为参数传递给事件处理器。
事件订阅是将事件源与事件处理器关联起来的过程。
在WinForm 中,可以通过代码或可视化设计工具来订阅事件。
通过代码订阅事件时,开发人员需要手动将事件源与事件处理器关联起来,通常使用事件订阅符号"+"来完成。
通过可视化设计工具订阅事件时,只需要在属性窗口中选择事件处理器即可。
当事件源触发事件时,底层机制会自动调用与之关联的事件处理器,并将事件参数传递给事件处理器。
事件处理器根据事件参数的信息进行相应的处理,如更新界面、执行业务逻辑等。
事件处理器的执行是在应用程序主线程中进行的,因此需要尽量避免耗时的操作,以免阻塞用户界面的响应。
值得注意的是,事件处理器的执行顺序是有规定的。
WinForm事件的处理是基于事件队列的,每个事件都有一个优先级,高优先级的事件将先于低优先级的事件被处理。
页⾯事件执⾏过程(完整版) 母版页和内容页中的事件母版页和内容页都可以包含控件的事件处理程序。
对于控件⽽⾔,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件。
控件事件不会从内容页发送到母版页。
同样,也不能在内容页中处理来⾃母版页控件的事件。
在某些情况下,内容页和母版页中会引发相同的事件。
例如,两者都引发和事件。
引发事件的⼀般规则是初始化事件从最⾥⾯的控件向最外⾯的控件引发,所有其他事件则从最外⾯的控件向最⾥⾯的控件引发。
请记住,母版页会合并到内容页中并被视为内容页中的⼀个控件,这⼀点⼗分有⽤。
下⾯是母版页与内容页合并后事件的发⽣顺序:1. 母版页控件 Init 事件。
2. 内容控件 Init 事件。
3. 母版页 Init 事件。
4. 内容页 Init 事件。
5. 内容页 Load 事件。
6. 母版页 Load 事件。
7. 内容控件 Load 事件。
8. 内容页 PreRender 事件。
9. 母版页 PreRender 事件。
10. 母版页控件 PreRender 事件。
11. 内容控件 PreRender 事件。
母版页和内容页中的事件顺序对于页⾯开发⼈员并不重要。
但是,如果您创建的事件处理程序取决于某些事件的可⽤性,那么您将发现,了解母版页和内容页中的事件顺序很有帮助。
Page 执⾏中将按照如下顺序激活事件:Page.PreInitPage.InitPage.InitComplitePage.PreLoadPage.LoadPage.LoadCompletePage.PreRenderPage.PreRenderComplete如果页⾯从另⼀个页⾯继承,如BasePage:System.Web.UI.Page,在BasePage中做了⼀些扩展,如权限检查,⽽其他页⾯从BasePage继承,则BasePage和最终Page的事件激活顺序是:UI.PreInitPage.PreInitUI.InitPage.InitUI.InitComplitePage.InitCompliteUI.PreLoadPage.PreLoadUI.LoadPage.LoadUI.LoadCompletePage.LoadCompleteUI.PreRenderPage.PreRenderUI.PreRenderCompletePage.PreRenderComplete如果使⽤了MasterPage,则MasterPage中的事件和ContentPage中的事件按照下⾯顺序激活:ContentPage.PreInitMaster.InitContentPage.InitContentPage.InitCompliteContentPage.PreLoadContentPage.LoadMaster.LoadContentPage.LoadCompleteContentPage.PreRender更进⼀步,如果ContentPage继承BasePage,那么,各事件的执⾏顺序将变成:UI.PreInitContentPage.PreInitMaster.InitUI.InitContentPage.InitUI.InitCompliteContentPage.InitCompliteUI.PreLoadContentPage.PreLoadUI.LoadContentPage.LoadMaster.LoadUI.LoadCompleteContentPage.LoadCompleteUI.PreRenderContentPage.PreRenderMaster.PreRenderUI.PreRenderCompleteContentPage.PreRenderComplete浏览下来发现并不是我现在所学的 1.1,估计应该是 2.0,不过也没有关系,这让我知道了他们有继承时加载的顺序。
E x c e l全部窗体事件详解值得收藏The pony was revised in January 2021一个控件从同一窗体的另一个控件实际接收到焦点之前,Enter事件发生。
同一窗体中的一个控件即将把焦点转移到另一个控件之前,E x i t事件发生。
语法PrivateSub object_Enter()PrivateSub object_Exit(ByVal Cancel AsMSForms.ReturnBoolean)Enter和Exit事件的语法包含以下成分:成分说明object必需。
一个有效的对象名。
Cancel必需。
事件状态。
False表示由该控件处理这个事件(这是默认方式)。
True表示由应用程序处理这个事件,并且焦点应当留在当前控件上。
说明Enter事件和Exit事件与VisualBasic中的GotFocus和LostFocus事件类似。
与GotFocus和LostFocus事件不同的是,当窗体接收或失去焦点时Enter事件和Exit事件不发生。
例如,假如选中了可初始化Enter事件的复选框,而后如又选中同一窗体中的另一个控件,那么对于该复选框来说,Exit事件被初始化(因为焦点正在移到同一窗体中的不同对象上),而对于该窗体中的第二个控件来说,Enter事件发生。
因为Enter事件发生在焦点移到一特定控件上之前,所以可用Enter事件过程来显示指令。
例如,可用一个宏或者事件过程来显示一个小窗体或消息框,标识控件一般所包含的数据类型。
注意将控件Exit事件的Cancel参数赋值为True,可防止控件失去焦点。
当将控件插入到窗体、框架或多页控件中的一个页面中时,此事件发生。
语法对于框架PrivateSub object_AddControl()对于多页PrivateSub object_AddControl(index AsLong,ctrl AsControl)AddControl事件的语法包含以下成分:成分说明object必需。
在WebForm1页面上直接放置用户控件WebUserControl1时的事件顺序:WebUserControl1_InitWebForm1_InitPage_LoadWebUserControl1_LoadWebForm1_PreRenderWebUserControl1_PreRenderWebUserControl1_UnloadWebForm1_Unload在WebForm1页面的OnInit方法中用代码Load用户控件WebUserControl1时的事件顺序:WebForm1_Init: OnInit WebForm1: Loading controls WebUserControl1_Init : OnInit WebForm1: added to Controls WebForm1: LoadViewState WebUserControl1: LoadViewState WebUserControl1: LoadPostData Begin WebUserControl1: LoadPostData End WebForm1_PageLoad: OnLoad after base's Onload. WebUserControl1_Load: after base's OnLoad iWebUserControl1: RaisePostDataChange WebForm1: OnPreRender WebUserControl1: OnPreRender WebForm1: SavedViewState WebUserControl1: SaveViewState 在WebForm1页面的Page_Load方法中用代码Load用户控件WebUserControl1时的事件顺序:WebForm1_Init : OnInit WebForm1: LoadViewState WebForm1_PageLoad: OnLoad after base's Onload. WebForm1: Loading controls WebUserControl1_Init : OnInit WebUserControl1: LoadViewState WebForm1: added to Controls WebUserControl1_Load: after base's OnLoad WebUserControl1: LoadPostData Begin WebUserControl1: LoadPostData End iWebUserControl1: RaisePostDataChange WebForm1: OnPreRender WebUserControl1: OnPreRender WebForm1: SavedViewState WebUserControl1: SaveViewState 在WebForm1页面的Button1_Click事件中用代码Load用户控件WebUserControl1时的事件顺序:WebForm1_InitPage_LoadButton1_ClickWebUserControl1_InitWebUserControl1_LoadWebForm1_PreRenderWebUserControl1_PreRenderWebUserControl1_UnloadWebForm1_Unload在WebForm1页面的Page_Load事件中用代码Load用户控件WebUserControl1,WebUserControl1又在Page_Load事件中用代码Load用户控件WebUserControl2时的事件顺序:WebForm1_InitPage_LoadWebUserControl1_InitWebUserControl1_LoadWebUserControl2_InitWebUserControl2_LoadWebForm1_PreRenderWebUserControl1_PreRenderWebUserControl2_PreRenderWebUserControl2_UnloadWebUserControl1_UnloadWebForm1_Unload 2.0服务器控件与form runat=server标记1, 2.0服务器控件与<form runat=server></form>的关系 2.0服务器控件(HTML服务器控件和Web服务器控件)是否必须需要放在<form runat=server></form>的标记之中,可以根据需要进行设置,大多数情况下,对于只用来进行界面显示的控件、并且不需要处理事件的控件,可以不放在<form runat=server></form>之间,对于大多数控件来说,是要在服务器端进行事件处理和获得某些返回值的,因此需要放在<form runat=server></form>之间。
2,如何进行控制服务器控件在进行Render、AddAttributesToRender等的时候,会执行下面这句:Page page1 = this.Page;if (page1 != null){page1.VerifyRenderingInServerForm(this);}Page.VerifyRenderingInServerForm 方法就是验证服务器控件是否需要在<formrunat=server></form>的标记之中,如果不在这个标记之中,将会引发下面的异常。
例如下面的代码:<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"></script><html xmlns="/1999/xhtml"><head runat="server"><title>VerifyRenderingInServerForm</title></head><body><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><form id="form1" runat="server"></form></body></html>在浏览这样的页面时,将会引发异常:类型“TextBox”的控件“TextBox1”必须放在具有 runat=server 的窗体标记内。
说明: 执行当前 Web 请求期间,出现未处理的异常。
请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Web.HttpException: 类型“TextBox”的控件“TextBox1”必须放在具有 runat=server 的窗体标记内。
这是因为,TextBox控件在进行Render的时候调用了page1.VerifyRenderingInServerForm(this);,因此,如果不放在<formrunat=server></form>的标记之间,这个验证过程是通不过的。
但是,我们可以在代码中重载这个方法,以便是TextBox控件可以放在<formrunat=server></form>的标记之外,例如下面的代码:<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">public override void VerifyRenderingInServerForm(Control control){}</script><html xmlns="/1999/xhtml"><head runat="server"><title>VerifyRenderingInServerForm</title></head><body><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><form id="form1" runat="server"></form></body></html>浏览这样的页面就不会产生异常。
3,调整展现方式后,页面能否正常工作MSDN上解释Page.VerifyRenderingInServerForm 方法时说:如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。
这些控件可以在呈现时调用该方法,以在它们没有包含在 HtmlForm 控件中时提供明确的错误信息。
是的,虽然下面的代码可以正常显示,但一旦单击“提交”按钮,服务器端将得不到输入的值,页不能保存状态了。
<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">public override void VerifyRenderingInServerForm(Control control){}protected void Button1_Click(object sender, EventArgs e){Response.Write("<li>TextBox1.Text = " + TextBox1.Text);Response.Write("<li>Request.Params = " +Request.Params[TextBox1.UniqueID]);}protected void Page_Load(object sender, EventArgs e){Response.Write("<li>TextBox1.Text = " + TextBox1.Text);Response.Write("<li>Request.Params = " +Request.Params[TextBox1.UniqueID]);if (!IsPostBack){TextBox1.Text = "《2.0应用开发技术》";}}</script><html xmlns="/1999/xhtml"><head runat="server"><title>VerifyRenderingInServerForm</title></head><body><asp:TextBox ID="TextBox1" runat="server" Width="600px"></asp:TextBox><form id="form1" runat="server"><asp:Button ID="Button1" runat="server" OnClick="Button1_Click"Text="提交" /></form></body></html>因此,在一般情况下,不要将服务器控件移到<form runat=server></form>的标记之外4,如何强制将服务器控件放入<form runat=server></form>的标记之间有些服务器控件可以不放在<form runat=server></form>的标记之间,如Label控件,但如果需要强制将它放<form runat=server></form>的标记之间,可以使用下面的方法:protected void Label1_PreRender(object sender, EventArgs e){this.VerifyRenderingInServerForm(Label1);}5,百害而无一益?有时候,页面上需要放置多个form表单(虽然只放置一个<form runat=server></form>的表单也能实现),将表单控件放在<form runat=server></form>标记之外,将非常方便使用,这在以前的asp页面中很常见,现在在aspx中也可义实现。