控件和父窗口之间的消息是怎么交互的?

身份认证 购VIP最低享 7 折!

win32创建子窗口 同时实现子窗口与父窗口传递信息 同时有win32显示int类型的知识点

MFC 的对话框和控件的封装真得可以节省你很多时间和功夫。没有MFC对控件的封装,你要操作控件就得耐着性子填写各种结构并写很多的SendMessage调用。MFC还提供了对话框数据交换(DDX),它可以在控件和变量之间传输数据。WTL 当然也提供了这些功能,并对控件的封装做了很多改进。本文将着眼于一个基于对话框的程序演示你以前用MFC实现的功能,除此之外还有WTL消息处理的增强功能。第五章将介绍高级界面特性和WTL对新控件的封装。

回顾一下ATL的对话框

创建一个对话框需要做三件事:

  1. 添加一个公有成员变量IDD,将它设置为对话框资源的ID.

然后就像主框架窗口那样添加消息处理函数,WTL没有改变这些,不过确实添加了一些其他能够在对话框中使用得特性。

WTL有许多控件的封装类对你应该比较熟悉,因为它们使用与MFC相同(或几乎相同)的名字。控件的方法的命名也和MFC一样,所以你可以参照MFC的文档使用这些WTL的封装类。不足之处是F12键不能方便地跳到类的定义代码处。

下面是Windows内建控件的封装类:

需要注意得一点是大多数封装类都是基于CWindow接口的,和CWindow一样,它们封装了HWND并对控件的消息进行了封装(例 如,CListBox::GetCurSel()封装了LB_GETCURSEL消息)。所以和CWindow一样,创建一个控件的封装对象并将它与已经 存在的控件关联起来只占用很少的资源,当然也和CWindow一样,控件封装对象销毁时不销毁控件本身。也有一些例外,如CBitmapButton, CCheckListViewCtrl和CHyperLink。

由于这些文章定位于有经验的MFC程序员,我就不浪费时间介绍这些封装类,它们和MFC相应的控件封装相似。当然我会介绍WTL的新类:CBitmapButtonCBitmapButton类与MFC的同名类有很大的不同,CHyperLink则完全是新事物。

用应用程序向导生成基于对话框的程序

运行VC并启动WTL应用向导,相信你在做时钟程序时已经用过它了,为我们的新程序命名为ControlMania1。在向导的第一页选择基于对话 框的应用,还要选择是使用模式对话框还是使用非模式对话框。它们有很大的区别,我将在第五章介绍它们的不同,现在我们选择简单的一种:模式对话框。如下所 示选择模式对话框和生成CPP文件选项:

第二页上所有的选项只对主窗口是框架窗口时有意义,现在它们是不可用状态,单击"Finish",再单击"OK"完成向导。

正如你想的那样,向导生成的基于对话框程序的代码非常简单。_tWinMain()函数在ControlMania1.cpp中,下面是重要的部分:

主对话框显示出来。(注意所有使用DoModal()创建的ATL对话框实际上是模式的,这不像MFC,MFC的所有对话框是非模式的,MFC通过代码禁 用对话框的父窗口来模拟模式对话框的行为)最后,_Module和COM被释放,DoModal()的返回值被用来作为程序的结束码。

将CMainDlg变量放在一个区块中是很重要的,因为CMainDlg可能有成员使用了ATL和WTL的特性, 这些成员在析构时也会用到ATL/WTL的特性,如果不使用区块,CMainDlg将在_Module.Term()(这个函数完成ATL/WTL的清理 工作)调用之后调用析构函数销毁自己(和成员),并试图使用ATL/WTL的特性,这将导致程序出现诊断错误崩溃。(WTL 3的向导生成的代码没有使用区块,使得我的一些程序在结束时崩溃)

你现在可以编译并运行这个程序,尽管它只是一个简陋的对话框:

CMainDlg 的代码处理了WM_INITDIALOG, WM_CLOSE和三个按钮的消息,如果你喜欢可以浏览一下这些代码,你应该能够看懂CMainDlg的声明,它的消息映射和它的消息处理函数。

这个简单的工程还演示了如何将控件和变量联系起来,这个程序使用了几个控件。在接下来的讨论中你可以随时回来查看这些图表。

虽然这样注册的控件类比我们用到的多,但是当我们向对话框添加不同类型的控件时就不用随时记得添加名为ICC_*的常量(译者加:以ICC_开头的一系列常量)。

有几种方法将一个变量和控件建立关联,可以使用CWindows(或其它Window接口类,如CListViewCtrl),也可以使用 CWindowImpl的派生类。如果只是需要一个临时变量就用CWindow,如果需要子类化一个控件并处理发送给该控件的消息就需要使用 CWindowImpl。

最简单的方法是声明一个CWindow或其它window接口类,然后调用Attach()方法,还可以使用CWindow的构造函数直接将变量与控件的HWND关联起来。

 下面的代码三种方法将变量和一个list控件联系起来:

记住CWindow的析构函数并不销毁控件窗口,所以在变量超出作用域时不需要将其脱离控件,如果你愿意的话还可以将其作为成员变量使用:你可以在OnInitDialog()处理函数中建立变量与控件的联系。

CContainedWindow是介于CWindow和CWindowImpl之间的类,它可以子类化控件,在控件的父窗口中处理控件的消息,这 使得所有的消息处理都放在对话框类中,不需要为为每个控件生成一个单独的CWindowImpl派生类对象。需要注意的是不能用 CContainedWindow 处理WM_COMMAND, WM_NOTIFY和其他通知消息,因为这些消息是发给控件的父窗口的。

  1. 将消息处理添加到对话框消息映射的ALT_MSG_MAP小节。
  2. 在对话框的构造函数中调用CContainedWindowT 构造函数并告诉它哪个ALT_MSG_MAP小节的消息需要处理。

在ControlMania1中,我对三个按钮分别使用了一个CContainedWindow,对话框处理发送到每一个按钮的WM_SETCURSOR消息,并改变鼠标指针形状。

其次,我们添加了ALT_MSG_MAP小节,OK按钮使用1小节,Exit按钮使用2小节。这意味着所有发送给OK按钮的消息将由ALT_MSG_MAP(1)小节处理,所有发给Exit按钮的消息将由ALT_MSG_MAP(2)小节处理。

构造函数的参数是消息映射链的地址和ALT_MSG_MAP的小节号码,第一个参数通常使用this,就是使用对话框自己的消息映射链,第二个参数告诉对象将消息发给ALT_MSG_MAP的哪个小节。

最后,我们将每个CContainedWindow对象与控件关联起来。

如果你还想使用按钮类的特性,你需要这样声明变量:

这样就可以使用CButton类的方法。

当你把鼠标光标移到这些按钮上就可以看到WM_SETCURSOR消息处理函数的作用结果:

第三种方法创建一个CWindowImpl派生类并用它子类化一个控件。这和第二种方法有些相似,只是消息处理放在CWindowImpl类内部而不是对话框类中。

接着在主对话框声明一个CButtonImpl成员变量:

WTL的DDX(对话框数据交换)很像MFC,可以使用很简单的方法将变量和控件关联起来。首先,和前面的例子一样你需要从CWindowImpl派生一个新类,这次我们使用一个新类CEditImpl,因为这次我们使用得是Edit控件。你还需要将#include atlddx.h 添加到stdafx.h中,这样就可以使用DDX代码。

要使主对话框支持DDX,需要将CWinDataExchange添加到继承列表中:

接着在对话框类中添加DDX链,这和MFC的类向导使用的DoDataExchange()函数功能相似。对于不同类型的数据可以使用不同的DDX 宏,我们使用DDX_CONTROL用来连接变量和控件,这次我们使用CEditImpl处理WM_CONTEXTMENU消息,使它能够在你右键单控件 时做一些事情。

现在运行ControlMania1程序,可以看到子类化的效果。鼠标右键单击编辑框将弹出消息框,当鼠标通过按钮上时鼠标形状会改变。

当然,DDX是用来做数据交换的,WTL支持在Edit控件和字符串之间交换数据,也可以将字符串解析成数字,转换成整型或浮点型变量,还支持Check box和Radio button组的状态与int型变量之间的转换。

DDX可以使用6种宏,每一种宏都对应一个CWinDataExchange类的方法支持其工作,每一种宏都用相同的形式:DDX_FOO(控件ID, 变量),每一种宏都可以支持多种类型的变量,例如DDX_TEXT的重载就支持多种类型的数据。

在字符串和edit box控件之间传输数据,变量类型可以是CString, BSTR, CComBSTR或者静态分配的字符串数组,但是不能使用new动态分配的数组。
在edit box控件和数字变量之间传输int型数据。
在edit box控件和数字变量之间传输无符号int型数据。
在edit box控件和数字变量之间传输浮点型(float)数据或双精度型数据(double)。

DDX_FLOAT宏有一些特殊,要使用DDX_FLOAT宏需要在stdafx.h文件的所有WTL头文件包含之前添加一行定义:

这个定义是必要的,因为默认状态为了优化程序的大小而不支持浮点数。

指示数据传输方向的标志。TRUE表示将数据从控件传输给变量,FALSE表示将数据从变量传输给控件。需要注意得是这个参数的默认值是FALSE,而MFC的UpdateData()函数的默认值是TRUE。为了方便记忆,你可以使用DDX_SAVE 和 DDX_LOAD标号(它们分别被定义为TRUE和FALSE)。
使用-1可以更新所有控件,如果只想DDX宏作用于一个控件就使用控件的ID。

如果控件更新成功DoDataExchange()会返回TRUE,如果失败就返回FALSE,对话框类有两个重载函数处理数据交换错误。一个是 OnDataExchangeError(),无论什么原因的错误都会调用这个函数,这个函数的默认实现在CWinDataExchange中,它仅仅是 驱动PC喇叭发出一声蜂鸣并将出错的控件设为当前焦点。另一个函数是OnDataValidateError(),但是要到本文的第五章介绍DDV时才用 得到。

在CMainDlg中添加几个变量,演示DDX的使用方法。

在OK按钮的处理函数中,我们首先调用DoDataExchange()将将edit控件的数据传送给我们刚刚添加的两个变量,然后将结果显示在列表控件中。

作为最后一个使用DDX的例子,我们添加一个check box演示DDX_CHECK的使用:

DDX_CHECK使用的变量类型是int型,它的可能值是0,1,2,分别对应check box的未选择状态,选择状态和不确定状态。你也可以使用常量BST_UNCHECKED,BST_CHECKED,和 BST_INDETERMINATE代替,对于check box来说只有选择和未选择两种状态,你可以将其视为布尔型变量。

以下是为使用check box的DDX而做的改动:

使用其它DDX_*宏的例子代码包含在例子工程中。

处理控件发送的通知消息

在WTL中处理通知消息与使用API方式编程相似,控件以WM_COMMAND 或 WM_NOTIFY 消息的方式向父窗口发送通知事件,父窗口相应并做相应处理。少数其它的消息也可以看作是通知消息,例如:WM_DRAWITEM,当一个自画控件需要画自 己时就会发送这个消息,父窗口可以自己处理这个消息,也可以再将它反射给控件,MFC采用得就是消息反射方式,使得控件能够自己处理通知消息,提高了代码

在父窗口中响应控件的通知消息

以WM_NOTIFY和WM_COMMAND消息形式发送的通知消息包含各种信息。WM_COMMAND消息的参数包含发送通知消息的控件ID,控 件的窗口句柄和通知代码,WM_NOTIFY消息的参数还包含一个NMHDR数据结构的指针。ATL和WTL有各种消息映射宏用来处理这些通知消息,我在 这里只介绍WTL宏,因为本文就是讲WTL得。使用这些宏需要在消息映射链中使用BEGIN_MSG_MAP_EX并包含atlcrack.h文件。

处理从某个控件发送得某个通知代码。
处理从某个控件发送得所有通知代码。
处理某个通知代码得所有消息,不管是从那个控件发出的。
处理ID在idFirst和idLast之间得控件发送的所有通知代码。
处理ID在idFirst和idLast之间得控件发送的某个通知代码。

还有一些宏专门处理WM_NOTIFY消息,和上面的宏功能类似,只是它们的名字开头以“NOTIFY_”代替“COMMAND_”。

WM_COMMAND通知消息不需要返回值,所以处理函数也不需要返回值,WM_NOTIFY消息处理函数的原型是:

消息处理函数的返回值用作消息相应的返回值,这不同于MFC,MFC的消息响应通过消息处理函数的LRESULT*参数得到返回值。发送通知消息的 控件的窗口句柄和通知代码包含在NMHDR结构中,分别是code和hendFrom成员。和MFC一样的是如果通知消息发送的不是普通的NMHDR结 构,你的消息处理函数应该将phdr参数转换成正确的类型。

我们将为CMainDlg添加LVN_ITEMCHANGED通知的处理函数,处理从list控件发出的这个通知,在对话框中显示当前选择的项目,先从添加消息映射宏和消息处理函数开始:

该处理函数并未用到phdr参数,我将他强制转换成NMLISTVIEW*只是为了演示用法。

如果你是用CWindowImpl的派生类封装控件,比如前面使用的CEditImpl,你可以在类的内部处理通知消息而不是在对话框中,这就是通 知消息的反射,它和MFC的消息反射相似。不同的是在WTL中父窗口和控件都可以处理通知消息,而在MFC中只有控件能处理通知消息(译者加:除非你重载 WindowProc函数,在MFC反射这些消息之前截获它们)。

如果需要将通知消息反射给控件封装类,只需在对话框的消息映射链中添加REFLECT_NOTIFICATIONS()宏:

这个宏向消息映射链添加了一些代码处理那些未被前面的宏处理的通知消息,它检查消息传递的HWND窗口句柄是否有效并将消息转发给这个窗口,当然, 消息代码的数值被改变成OLE控件所使用的值,OLE控件有与之相似的消息反射系统。新的消息代码值用OCM_xxx代替了WM_xxx,但是消息的处理 方式和未反射前一样。

有18中被反射的消息:

用来处理反射消息的WTL宏

运行ControlMania1,用鼠标点击树控件上的+/-按钮,你就会看到消息处理函数的作用-节点展开后就不能再折叠起来。

容易出错和混淆的地方 对话框的字体

如果你像我一样对界面非常讲究并且正在只用windows 2000或XP,你就会奇怪为什么对话框使用MS Sans Serif字体而不是Tahoma字体,因为VC6太老了,它生成的资源文件在NT 4上工作的很好,但是对于新的版本就会有问题。你可以自己修改,需要手工编辑资源文件,据我所知VC 7不存在这个问题。

在资源文件中对话框的入口处需要修改3个地方:

不幸的是前两个修改会在每次保存资源文件时丢失(被VC又改回原样),所以需要重复这些修改,下面是改动之前的代码:

这样改了之后,对话框将在新的操作系统上使用Tahoma字体,而在老的操作系统上仍旧使用MS Sans Serif字体。

本文的论坛 FAQ已 经做过解释, ATL包含的优化设置让你创建一个不使用C运行库(CRT)的程序,使用这个优化需要在预处理设置中添加_ATL_MIN_CRT标号,向导生成的代码在 Release配置中默认使用了这个优化。由于我写程序总是会用到CRT函数,所以我总是去掉这个标号,如果你在CString类或DDX中用到了浮点运 算特性,你也要去掉这个标号。

在第五章,我将介绍对话框数据验证(DDV),WTL对新控件的封装和自画控件、自定外观控件等一些高级界面特性。


中常用的服务器控件,了解了这些控件的使用,可以利用这些控件开发出功能强大的Web应用程序。


所有的控件都有两种方式创建,第一种方式是通过工具箱进行拖拽、第二种方式时在在aspx页面编写标签。为了节省篇幅,本文只在一、文本类型控件中说明创建控件的方法。

主要用于在网页上呈现文字,这些控件可以分为只读的文本控件或接受用户输入的文本控件。

1、Label控件(显示用户不能编辑的文本)

第一种方式是在源代码中定义标签的时候直接赋值,这种方式一般用于显示静态的文本

第二种方式是在后台代码中绑定赋值,一般用于显示动态的文本

同样的设置Label外观的方式有两种,第一种方式是直接在标签上定义样式属性和值

第二种方式是通过Label控件的属性页面,设置它的外观,如下图所示:

2、TextBox控件(用户可编辑文本)

文本框控件,可以用于输入或者显示文本,通常用于可编辑文本(也可以设置为只读)。

(1)文本内容的显示模式

显示模式的设置是通过TextMode属性进行更改的,它的属性值对应以下功能:

(2)修改文本内容所触发的事情

在一些输入文本框的内容时,我们希望用户输入完能够立刻检查文本内容的合法性。例如,在注册用户时,验证用户名是否存在、是否符合命名规范等等。这就需要TextBox中的TextChanged事件,该事件是当文本内容后触发,双击你定义的文本框,后台会自动生成相应的方法


用于响应用户点击行为的控件。

创建一个Button控件,双击这个控件就可以自动生成写逻辑代码的方法! 如下图所示:
下面是编写逻辑代码的方法:

这个事件是用于触发客户端的JavaScript脚本代码,在单击Button按钮后应该询问用户是否确认这样的操作,如果用户误点那么就是一次无效的提交。

定义一个Button控件,然后响应一个OnClientClick事件。代码如下:

(3)简单应用——网页弹出消息对话框

与上述步骤类似,定义一个Button标签,然后创建一个单击方法,写入如下代码:

超链接按钮控件,与上述Button类似,但在呈现的样式上不一样,它以超链接的形式显示。

定义一个标签,双击这个东西就会弹出相应的单击事件

(2)定义页面跳转链接

这个控件除了单击事件外还有一个很常用的属性,即——PostBackUrl属性,该属性是用来设置单击控件时链接到的网页地址。设置的时候,单击后面的三个点就会弹出下图所示的对话框,选择一个网页地址就好了。

(3)简单应用——实现个性化页面跳转功能

先看一下,最终的效果吧!如下图所示:
实现这个个性化页面跳转功能很简单。通过设置LinkButton控件中的PostBackUrl属性实现超链接功能,链接按钮按钮分别设置为不一样的颜色,在跳转的时候传值即可。

新建一个网站并且创建首页,再添加一个GetColor页面,在首页上添加七个LinkButton控件,如下代码所示:


选择类型控件是用于在一个集合列表中选中其中的一项或多项,这些控件中包含单选以及多选控件。

用于显示一组列表项,用户可以选择一项或多项。

可以通过下面的代码,定义一个ListBox控件:

(2)后台绑定列表属性

可以用数组或集合来填充控件,使用DataSource属性将数组或集合中的数据绑定到空间上,代码如下:

值得一提的是:DataSource只是指定数据源,DataBind把这些数据绑定到了控件上。

有两种方法获取ListBox选择项

第一种方法是通过遍历的方式获取并进行Selected属性判断,代码如下:

第二种方法是通过SelectedValue属性直接获取,代码如下:

下面是ListBox控件的一些属性:

  • DataSource属性:用于指定控件的数据源
(4)简单应用——选择并移动ListBox控件中的项

怼两个ListBox控件,再添加四个Button按钮,实现列表控件元素的移动移动,下面时成品效果图:
开始写代码,首先按照下面的代码添加上图中需要用的控件:

然后在.aspx.cs界面的Page_Load方法中通过集合来绑定一些数据,在绑定数据之前,需要判断一下是不是回发。代码如下:

紧接着就是四个Button的点击事件了,这里只给出第一个和第三个Button的点击方法,第二个和第四个与之雷同,为节省篇幅,不再贴出。

与上面的控件大体类似,但是DropDownList只允许用户每次从列表中选择一项。所以它是下拉列表框。

(1)更改选定索引触发事件

选中一个选项后就触发一个后台方法,首先先定义一个DropDownList控件:

双击这个控件就可以得到一个SelectedIndexChanged方法来,我们获取一下选中的索引值、Value值和Text值,代码如下:

(2)简单应用——查看假期以便合理安排出行计划

这个应用要求做一个下拉列表框然后,根据列表框的内容显示哪几天是假期。

这个项目一看就需要CSS来设置样式,所以我们先设置一下样式吧~(这个代码真的长)

写完CSS代码接着,定义这个下拉列表框等等,代码如下:

这样写完之后,基本的样式也能显示出来了,然后我们编写逻辑代码。首先需要在.aspx.cs页面的Page_Load方法中先把这几个节日的放假日期放到一个集合里面,后面如果我们选中下拉列表框的某一项,直接通过调用集合的某一项然后显示在页面上就好了,先来看一下Page_Load方法:

然后就大功告成了!!点击运行就可以看到预期的效果了!!

是一种单选按钮控件,可以在页面中添加一组RadioButton,每组都有相同的GroupName(组名),每组只能选择一个选项。

使用GroupName属性指定一组单选按钮,一组的按钮互相排斥。他是这样定义的:

以上定义了两组RadioButton,运行后是这样的效果:

(2)获取或设置选中状态

Check属性可以用来设置或者获取其选中的状态。

第一种方法:定义控件直接设置,代码如下:

第二种方法:在后台代码中进行设置,代码如下:

在后台中判断是否选中:

(3)简单应用——模拟考试系统中的单选题

先来看一下,成品的效果:
观察上面的GIF图,发现需要用到四个RadioButton(同一组),还需要用到一个Lable控件用来显示每次选择的答案(这里需要用的RadioButtonCheckedChanged属性),然后就是一个Button控件了,好!开始写代码!

首先是定义完上面我们用到的标签:

 请从下面的4个选项中选出你认为正确的的答案(单选送命题)<br />

然后分别在设计页面双击上面的标签,会在后台生成相应的方法。先来控制显示Lable的内容,每次选中一个就显示相应的题号,这里只给出一个方法,剩下的都一样:

4、CheckBox控件(真假复选框)

用来显示设置为truefalse的复选框。一组中可选择单个或多个。

  • Text属性:设置显示的文本
  • TextAlign属性:当值为Left时,文本显示在单选按钮左测,否则为右侧
(2)简单应用——模拟考试系统中的多选题


我们需要用到四个CheckBox还有一个Button控件,我们先来定义一下:

 请从下面四个选项中选出你认为正确的答案(多选题)<br />

然后编写一下,响应Button点击的方法:


用于在网页上呈现图片的一种控件。

1、Image控件(显示图片)

  • ImageAlign属性用于指定图像相对于网页上其他元素的对齐方式。
沿网页左边缘对齐,文字在图像右边换行
沿网页右边缘对齐,文字在图像左边换行
图像的下边缘与第一行文本的下边缘对齐
图像的上边缘与同一行上最高元素的上边缘对齐
图像的中间与第一行文本的下边缘对齐
图像的下边缘与第一行文本的下边缘对齐
图像的下边缘与同一行中最大元素的下边缘对齐
图像的中间与同一行中最大元素的中间对齐
图像的上边缘与同一行上最高文本的上边缘对齐
(2)简单应用——动态显示用户头像


由上图可知,需要用的控件有DropDownListImage,首先在页面源代码中定义以下标签:

2、ImageMap控件(定义热点区域)

该控件允许在图片中定义一些热点(HotSpot)区域。当用户点击这片区域,将会引发超链接或者单击事件。当需要对某副图片的局部进行交互时,可以使用该控件。

使用ImageMap控件需要指定控件的单击行为和计算单击的坐标点。HotSpotMode属性用于获取或者设置单击热点区域后的默认行为方式。下面是HotSpotMode的枚举值:

无任何操作,此时形同一张没有设置热点区域的普通图片
未设置项,同时也默认项。默认情况下执行定向操作,即连接到指定的URL地址。如果未指定URL地址,则默认链接到应用程序的根目录下
定向操作项,连接到指定URL地址,如果没有定URL地址,则默认连接到应用程序根目录下
回传操作项,单击热点区域,将触发控件的Click事件

HotSpotMode属性虽然为图片中的所有热点区域定义了单击事件的默认行为方式,在某些情况下图片中热点区域的行为方式各不相同,需要单独为每个热点区域定义HotSpotMode属性及相关属性。

HotSpots属性用于获取HotSpots对象集合。HotSpot类是一个抽象类,它包含以下三个子类:

上面的这些子类的实例称为HotSpot对象,创建HotSpot的步骤是这样的:

首先定义一个ImageMap控件,单击属性,在属性面板中,单击HotSpots后面的三个点,会出现:
单击添加后下面会出现上述三个子类,我们点击一个CircleHotSpot看一下:
就是这样…………看个例子吧

(3)简单应用——展示图片中的方位

这个例子是使用ImageMap中的方位,但单击其中某一块儿的时候提示用户所属方位。

然后通过上述的窗口或者定义标签都行,定义每个热点区域:(这里给出代码部分)

然后双击这个图片,怼一个Cilck方法,在这个方法中接受回传值,绑定Label的值:


五、Panel容器控件(为其他控件提供一个容器)

该控件在页面内为其他控件提供了一个容器,可以将多个控件放入一个Panel容器控件中。

1、Panel容器常用属性

Panel容器的多数属性是对外观样式进行设置的,与前面的大致相同,下面是他的其他一些属性。

获取或设置分配给服务器控件的编程标识符
用于指示该控件是否可见
面板的滚动条外观,默认为None
用于设置控件内容的水平对齐方式
获取或设置一个值,该值指示是否已经启用控件
根据面板中的内容可自动控制是否显示滚动条
容器的内容均匀展开,与左右边距对齐

2、简单应用——显示或隐藏一组控件

显示或隐藏一组控件,先来看一下效果:
我们首先通过标签的形式,定义一些控件,并用Panel括起来:

然后我们在.aspx.cs页面的Page_Load方法中,显示一下当前的时间:


六、FileUpload文件上传控件(上传文件)

该控件的主要功能是向指定目录上传文件,该控件包括一个文本和一个浏览按钮。用户可以在文本框内输入完整的文件路径或者通过按钮浏览并选择需要上传的文件。FileUpload控件不会自动上传文件,必须设置相关的事件处理程序,并在程序中实现文件上传。

下面是FileUoload常用的属性及说明:

获取或设置分配给服务器控件的编程标识符
获取上传文件的字节数组
获取指向上传文件的Stream对象
获取上传文件在客户端的文件名称
获取一个布尔值,用于表示FileUpload控件是否已经包含一个文件
获取一个上传文件相关的HttpPostedFile对象,使用该对象可以获取上传文件的相关属性

2、简单应用——上传图片文件

同样的,先来看一下效果:
首先添加控件!直接写标签:

然后写一下点击上传的Click方法:

大功告成!!!!!!!


*终于完了!我写了两天啊啊啊啊,awsl!在开发网站的时候并不一定必须用到Web服务器控件,但是这些控件给开法人员带来了更高的开发效率~~~~*

我要回帖

更多关于 下载控件安装并使用页面交互 的文章

 

随机推荐