ASP如何制作用户自定义控件
- 格式:docx
- 大小:25.95 KB
- 文档页数:12
动态网页设计与制作教案章节一:概述教学目标:1. 了解的发展历程和特点。
2. 掌握的运行环境。
3. 熟悉的组件和架构。
教学内容:1. 的发展历程。
2. 的特点。
3. 的运行环境。
4. 的组件和架构。
教学方法:1. 讲授法:讲解的发展历程、特点和运行环境。
2. 案例分析法:分析的组件和架构。
教学时长:2课时章节二:C语言基础教学目标:1. 掌握C语言的基本语法。
2. 熟悉C语言的数据类型、运算符和表达式。
3. 了解C语言的流程控制语句。
教学内容:1. C语言的基本语法。
2. C语言的数据类型、运算符和表达式。
3. C语言的流程控制语句。
教学方法:1. 讲授法:讲解C语言的基本语法、数据类型、运算符和表达式。
2. 实践法:上机练习C语言的流程控制语句。
教学时长:3课时章节三:HTML与CSS基础教学目标:1. 掌握HTML的基本标签和属性。
2. 熟悉CSS的使用方法和语法。
3. 了解如何利用HTML和CSS布局页面。
教学内容:1. HTML的基本标签和属性。
2. CSS的使用方法和语法。
3. HTML和CSS布局页面。
教学方法:1. 讲授法:讲解HTML的基本标签和属性、CSS的使用方法和语法。
2. 实践法:上机练习HTML和CSS布局页面。
教学时长:2课时章节四: Web Forms概述教学目标:1. 了解 Web Forms的特点。
2. 掌握 Web Forms的运行原理。
3. 熟悉 Web Forms的基本控件。
教学内容:1. Web Forms的特点。
2. Web Forms的运行原理。
3. Web Forms的基本控件。
教学方法:1. 讲授法:讲解 Web Forms的特点、运行原理和基本控件。
2. 案例分析法:分析 Web Forms的应用实例。
教学时长:2课时章节五: Web Forms控件应用教学目标:1. 掌握 Web Forms常用控件的使用方法。
2. 熟悉 Web Forms控件的事件处理。
怎么进行控件设置操作方法控件设置是指对某个程序或应用中的控件进行属性、样式或行为的调整和配置。
在软件开发和用户界面设计中,控件设置非常重要,因为它可以使用户能够根据自己的需求和喜好来定制界面,提高用户的使用体验。
下面我将介绍一些常见的控件设置操作方法,帮助您更好地理解和应用。
1. 选择控件:首先,您需要确定您要设置的控件对象。
在大多数的开发环境或设计软件中,您可以通过鼠标单击或拖拽来选择控件。
如果控件是嵌套在其他控件中的,您可能需要在层次结构中找到它。
2. 打开属性面板:一旦您选中了控件,您可以通过右键单击控件或使用菜单栏中的选项来打开属性面板。
属性面板是控件设置的主要界面,它可以让您更改控件的各种属性。
3. 设置基本属性:在属性面板中,您可以设置控件的基本属性,如名称、类型、位置、大小、可见性等。
这些基本属性决定了控件在屏幕上的呈现方式。
您可以手动输入数值,或者使用鼠标或键盘控制进行调整。
4. 设置样式和外观:控件的样式和外观是其外观和风格的表现形式。
在属性面板中,您可以修改控件的背景颜色、字体、边框、图标等。
可以通过选择预设样式、自定义样式,或者直接编写代码来设置控件的外观。
5. 设置交互行为:控件的交互行为决定了用户与控件之间的互动方式。
您可以通过属性面板来设置控件的事件处理器,例如点击事件、拖拽事件、鼠标移入移出事件等。
您可以为控件绑定相应的处理函数或事件函数,使其在特定条件下执行相应的操作。
6. 设置数据绑定:在某些情况下,您可能需要将控件与数据源进行绑定,以实现数据的显示和更新。
例如,在一个表单中,您可以将文本框控件与数据库的字段进行绑定,使用户输入的数据能够自动保存到数据库中。
数据绑定可以通过属性面板或代码进行设置。
7. 设置布局和容器:控件的布局和容器决定了控件在界面中的排列方式和组织结构。
您可以使用布局管理器来设置控件在容器中的位置和大小。
一些常见的布局管理器包括流布局、网格布局、边界布局等。
自定义控件开发一般而言,Visual Studio 2005中自带的几十种控件已经足够我们使用了,但是,在一些特殊的需求中,可能需要一些特殊的控件来与用户进行交互,这时,就需要我们自己开发新的、满足用户需求的控件。
要开发自己的控件,有几种方法:❶复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求。
❷扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控件,增加新的功能,或者修改原有功能,来满足用户需求。
❸自定义控件(Custom Controls):就是直接从System.Windows.Forms.Control 类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。
要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作。
同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。
所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。
下面我们就分别给大家介绍这三种方法。
❶复合控件(Composite Controls)复合控件实际上是控件的集合,类似于堆积木。
因此,可以按照用户的需求,把VS 2005工具箱中的控件任意组合起来,形成一个复合控件。
在以后使用中,将生成的这个复合控件作为一个控件来对待。
复合控件一般都是从UserControl类派生而来,因此复合控件(用户控件)可以在“UserControl测试容器”中进行测试。
复合控件的创建步骤:第一步:新建一个Windows控件库项目“CompositeControlDemo”第二步:向复合控件中添加Visual Studio 2005中的控件组合。
用户控件和自定义控件的定义的区别
(一).用户控件和自定义控件概述
用户控件(UserControl): 扩展名为*.ascx,跟*.aspx 在结构上相似,是指页面中
加载的功能块,只是用户控件不能单独作为页面运行,必须嵌入到*.aspx页面或其它用
户控件中使用.
自定义控件,跟HtmlControl或WebControl相似,编译后可以添加引用到工具栏里
面,直接用鼠标拖动使用.
(二).使用
在一个大系统中,有时候会只能几个*.aspx页面,其余的都是做成*.ascx页面,
这样可以增强页面之间的藕合性,一个用户控件*.ascx都作为一个独立的功能块.
自定义控件是指编译后直接可以放到工具箱中用,就像TextBox,DataGrid一样
在设计器中可以用鼠标拖动到页面上使用.
自定义服务器控件分为两种:
1.一种是用*.aspx代码和*.cs代码编译后
生成DLL,再添加引用到工具箱使用.
一般用于WebForm中.
2.另一种是只用*.cs实现,再编译生成DLL,添加到工具箱使用.
一般用于WinForm中.
自定义控件生成步骤:
比如:
1. 将一个Button从设计器拖到页面中,
对按钮大小,颜色或文本设置一个固定值,保存文件名为: a.cs
2. csc /r:System.dll
/t:library/out:..\..\A.dll a.cs
3. 右击工具箱空白处,弹出右击菜单后,选“添加移除项”,将刚生成的DLL
添加到工具箱里面来,这样,就可以像一般的Button一样拖动使用了。
WPF使⽤Winform⾃定义控件在WPF的⽤户控件中使⽤Winfrom⾃定义控件的过程:1、添加引⽤WindowsFormsIntegration.dllSystem.Windows.Forms.dll2、在要使⽤WinForm控件的WPF窗体的XAML⽂件中添加如下内容:xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"如下图所⽰:3、在WPF的容器控件内如StackPanel内⾸先要添加WinForm控件的宿主容器,⽤于衔接WPF和WinForm,对应XAML如下:说明:<wfi:WindowsFormsHost></wfi:WindowsFormsHost>即为WinForm控件的宿主容器,每⼀个宿主容器只能放⼀个WinForm控件,如下例,放了三个WinForm控件,分别放在三个宿主容器⾥⾯,该容器可以设置属性来调整⼤⼩和布局注意:如上我添加的WinForm控件如在指定其Name时,必须加前缀x:,如添加Lable时<wf:Label x:Name="wpfLabel" Text="我是WPF中的WinForm控件” />,否则后台代码⽆法访问。
<local:UserControl1 Name="Header" Width="319" Height="30"></local:UserControl1>这个为Winform⾃定义控件。
VBA中的用户界面设计和自定义控件随着计算机技术的不断发展,用户界面设计在软件开发中扮演着越来越重要的角色。
VBA(Visual Basic for Applications)作为一种强大的编程语言,提供了丰富的工具和功能,使得用户界面设计和自定义控件变得更加灵活和易于实现。
本文旨在介绍VBA中的用户界面设计和自定义控件的相关内容。
在VBA中,用户界面设计往往基于表单(Form)。
通过表单,可以创建交互性强、用户友好的应用程序。
VBA提供了丰富的控件类型,如文本框、标签、按钮、列表框等,可以用来构建界面元素。
用户可以通过拖拽的方式将这些控件添加到表单上,并进行相应的属性设置和事件编写,实现丰富的用户界面交互效果。
在进行用户界面设计时,设计原则和技巧是非常重要的。
首先,界面整洁简明,避免过多的控件和复杂的布局,以免用户感到困扰。
其次,界面要符合用户的直观操作习惯,提供清晰明了的导航和操作指引。
此外,界面的美观性和色彩搭配也是需要考虑的因素,可以根据应用程序的定位和目标用户来选择适合的主题和风格。
除了基本的表单控件外,VBA还支持自定义控件的创建和使用。
自定义控件可以满足特定业务需求,并且可以根据个人偏好进行灵活的定制。
VBA中的自定义控件可以通过编程方式创建,也可以通过ActiveX控件或Windows API实现。
编程方式创建自定义控件需要使用VBA提供的控件对象模型。
通过创建类模块和控件模块,可以定义新的控件类型,并在需要的地方使用。
自定义控件具有更高的灵活性和扩展性,可以根据实际需求设置不同的属性和事件,实现个性化的用户界面。
通过ActiveX控件,开发者可以使用第三方控件库,如Microsoft Office裡的常用控件,以扩展VBA的功能。
ActiveX控件是可重用的二进制组件,可以在VBA开发环境中进行使用。
这些控件具有更丰富的功能和更好的性能,可以提升用户界面的体验和效果。
另外,使用Windows API可以调用操作系统提供的功能和控件,实现更高级的用户界面效果。
用户控件的应用本节主要学习用户控件的工作原理、如何创建用户控件以及如何向 网页添加用户控件的信息。
本节内容 用户控件概述如何:将Web 窗体页转换为 用户控件如何:在 网页中包括用户控件如何: 用户控件的实例,用实例详细说明如何使用用户控件用户控件概述在前面的教学示例中使用了,提供的标准控件。
毫无疑问,提供了相当丰富的控件。
但是,有时候这些控件还不能满足实际业务功能的要求。
在这种情况下,就可以使用开发具有所有自定义功能的新控件,本节我们学习如何在创建这些控件。
主要学习用户控件及应用。
自定义控件下节学习。
用户控件和自定义控件的优点在开始创建这些Web控件之前,有必要了解他们的用处。
正如类的构建是为了代码重用性,重用现有用户控件也很必要。
例如,如果不提供控件,那么即使是网页/窗体上的一个文本框也需要编码。
TexTbox控件虽小,但为网页开发人员节省了数小时的重复工作时间。
既然这样一种简单的控件能有如此强大的可重用效果,可以想象如果能够重用向DataGrid这样的复合控件,其帮助作用会有多大。
显而易见,用户控件和自定义控件有助于可视化能力和功能能力的可重用性,还有助于软件封装和分布这些功能。
用户控件是可重用的。
可重用控件用两种方式创建,第一个而且是最简单的方法就如同创建一个页面一样。
这种控件成为用户控件。
这些控件可简单地重用现有的 Web控件和HTML元素创建,生成一个ascx文件。
第二种方法是使用C#创建完成自定义的控件,这种控件叫自定义控件。
用户控件和自定义控件的差别●用户控件用.ascx文件表示。
它不是编译代码,便以随网页动态的进行,自定义控件被编译在DLL文件中,是编译代码。
●用户控件不会出现在工具箱中,而自定义控价会出现在工具箱中。
●用户控件支持缓存,而自定义控件不支持缓存。
●用户控件会对使用可视化设计工具的用户提供有限的支持,而自定义控件控件会提供全面的支持。
什么时候使用用户控件一般地,当内容在逻辑上可组合在一起,而且又有可能要在多处使用时,使用用户控件。
1.打开VS2008-新建一个工程-选译ASP。
NET服务器控件2.自动生成一个文件,打代码拷进去,调试好程序3.点击“生成菜单-生成XX”4.到工程目录\bin\Debug 找到dll文件把它拷到一个固定目录里如:DotNet_DLL里============附带一个我重写Repeater的代码=================== using System;using System.Collections.Generic;using ponentModel;using System.Linq;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;using System.Data.SqlClient;using System.Data.OleDb;namespace lwf_MVC.lwf_Controls{[DefaultProperty("pageIndex")][ToolboxData("<!--Repeater Begin --><{0}:Repeater ID=\"Rep_list\" runat=\"server\" EnableViewState=\"false\"DisplayPageing=\"Always\"><ItemTemplate></ItemTemplate></{0}:Repeater> <!--Repeater End -->")]public class Repeater : System.Web.UI.WebControls.Repeater{private int _recordcount = 0;private int _pageSize = 0;private int _pageIndex = 1;private string _PID = "";private string _CssClass = "CssPage"; //输出数据流时设一个样式给它样式名为CssPageprivate object _DataSourceList;private PagedDataSource _pds = new PagedDataSource();//public bool _DisplayPageing;public MyEnum _DisplayPageing;private MyEnumLanguage _Language;//构造函数public Repeater(){}#region ____________控件属性:RecordCount、pageSize、pageIndex、PID、CssClass、DataSource1____________[Bindable(true)][Category("data")][DefaultValue("1")][Localizable(true)][Description("记录总数")]public int RecordCount{get{return _recordcount;}set{_recordcount = value;}}[Bindable(true)][Category("data")][DefaultValue("15")][Localizable(true)][Description("单页记录数")]public int pageSize{get{return _pageSize;}set{_pageSize = value;}}[Bindable(true)][Category("data")][DefaultValue("1")][Localizable(true)][Description("当前页码")]public int pageIndex{get{return _pageIndex;}set{_pageIndex = value;}}[Bindable(true)][Category("data")][DefaultValue("")][Localizable(true)][Description("其它参数传递")]public string PID{get{return _PID;}set{_PID = value;}}[Bindable(true)][Category("data")][DefaultValue("CssPage")][Localizable(true)][Description("连接样式")]public string CssClass{get{return _CssClass;}set{_CssClass = value;}}[Bindable(true)][Category("data")][DefaultValue("")][Localizable(true)][Description("数据源,DataTable")]public object DataSource1{get{return _pds;}set{switch (value.GetType().ToString()){case "System.Data.DataTable":_recordcount = ((DataTable)value).Rows.Count;_pds.DataSource = ((DataTable)value).DefaultView;break;case"System.Collections.Generic.List`1[System.Object]":_recordcount = ((List<object>)value).Count;_pds.DataSource = (List<object>)value;break;case"System.Data.SqlClient.SqlDataReader":DataTable i_dt = Normal.ConvertDataReaderToDataTable((SqlDataReader)value);_recordcount =i_dt.Rows.Count;_pds.DataSource =i_dt.DefaultView;break;case"System.Data.SqlClient.OleDbDataReader":DataTable i_dtOle = Normal.ConvertDataReaderToDataTable((OleDbDataReader)value);_recordcount =i_dtOle.Rows.Count;_pds.DataSource =i_dtOle.DefaultView;break;default:_recordcount = ((DataTable)value).Rows.Count;_pds.DataSource = ((DataTable)value).DefaultView;break;}_pds.AllowPaging = true;_pds.PageSize = _pageSize;_pds.CurrentPageIndex = this._pageIndex - 1;base.DataSource = _pds;}}public MyEnum DisplayPageing{get { return _DisplayPageing; }set { _DisplayPageing = value; }}public enum MyEnum{Always = 1,Auto = 2,Never = 3}public MyEnumLanguage Language{get { return _Language; }set { _Language = value; }}public enum MyEnumLanguage{Chinese = 1,English = 2}#endregion//外部使用public string ThePage(){string retStr = "";retStr = this.ThePage(_recordcount, _pageSize,_pageIndex, _PID, _CssClass);return retStr;}//分页函数,为输出显示流提供HTML代码/// <summary>/// 分页函数/// </summary>/// <param name="i_RecordCount">总记录数</param>/// <param name="i_pageSize">每页记录数</param>/// <param name="i_pageIndex">当前页数</param>/// <param name="i_PID">其它参数</param>/// <param name="i_CssClass">连接样式</param>/// <returns>HTML代码</returns>public string ThePage(int i_RecordCount, int i_pagesize, int i_pageIndex, string i_PID, string i_CssClass){int i_Pcount = 0;int i_StartPageNum;int i_EndPageNum;string i_pagerString = "";string i_pagerString_ENG = "";i_pagerString = i_pagerString + "<styletype=\"text/css\">\n.CssPage {font-family: Arial, Helvetica, sans-serif;font-size: 12px;line-height: 25px;color: #333;text-decoration:none;}\na.CssPage:hover{font-family: Arial, Helvetica, sans-serif;font-size:12px;line-height: 25px;color: #ff0000;text-decoration: underline;}\n</style>\n";i_pagerString_ENG = i_pagerString_ENG + "<style type=\"text/css\">\n.CssPage {font-family: Arial, Helvetica, sans-serif;font-size: 12px;line-height: 25px;color: #333;text-decoration:none;}\na.CssPage:hover{font-family: Arial, Helvetica, sans-serif;font-size:12px;line-height: 25px;color: #ff0000;text-decoration: underline;}\n</style>\n";if (i_pagesize != 0){i_Pcount = (i_RecordCount / i_pagesize);i_Pcount = ((i_RecordCount %i_pagesize) != 0 ? i_Pcount + 1 : i_Pcount);i_Pcount = (i_Pcount == 0 ? 1 : i_Pcount);}if (i_pageIndex <= 0) i_pageIndex = 1;if (i_pageIndex > i_Pcount) i_pageIndex =i_Pcount;i_StartPageNum = 1;while (i_StartPageNum + 10 <= i_pageIndex){i_StartPageNum = i_StartPageNum + 10;}i_EndPageNum = i_StartPageNum + 9;if (i_EndPageNum > i_Pcount) i_EndPageNum = i_Pcount;i_pagerString = i_pagerString + "<div class='" +i_CssClass + "' style='padding-left:20px;padding-right:20px'>共<b>" +i_Pcount + "</b>页共有<b>" + i_RecordCount + "</b>记录第<b>" +i_pageIndex + "</b>页跳到第[ ";if (i_RecordCount <=Convert.ToInt32((i_pageIndex) * i_pagesize)){i_pagerString_ENG = i_pagerString_ENG + "<div class='" + i_CssClass + "'style='padding-left:20px;padding-right:20px;float:right'><divstyle='float:left;padding-right:60px'>Total " + i_RecordCount + " , " +((i_pageIndex - 1) * i_pagesize + 1) + "-" + i_RecordCount + " of " +i_RecordCount + " Records </div><div style='float:left;padding-left:60px'>";}else{i_pagerString_ENG = i_pagerString_ENG + "<div class='" + i_CssClass + "'style='padding-left:20px;padding-right:20px;float:right'><divstyle='float:left;padding-right:60px'>Total " + i_RecordCount + " , " +((i_pageIndex - 1) * i_pagesize + 1) + "-" + ((i_pageIndex) * i_pagesize) + " of " + i_RecordCount + " Records </div><div style='float:left;padding-left:60px'>";}if (i_pageIndex != 1){//i_pagerString = i_pagerString + "<a class='" + i_CssClass + "' href='?" + i_PID + "page=1'>首页</a><a class='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_pageIndex - 1).ToString() + "'>上一页</a>";i_pagerString_ENG = i_pagerString_ENG + "<a class='" + i_CssClass + "' href='?" + i_PID + "page=1'> First</a><a class='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_pageIndex -1).ToString() + "'>Prev</a> ";}i_pagerString_ENG = i_pagerString_ENG + " [ ";if (i_StartPageNum > 1){i_pagerString = i_pagerString + "<aclass='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_StartPageNum - 1).ToString() + "' title='前十页'><font face='webdings'>7</font></a>";i_pagerString_ENG = i_pagerString_ENG + " <a class='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_StartPageNum - 1).ToString() + "' title='Prev Ten'><font face='webdings'>7</font></a>";}for (int i_i = i_StartPageNum; i_i <=i_EndPageNum; i_i++){if (i_i != i_pageIndex){i_pagerString = i_pagerString + "<a class='" + i_CssClass + "' href='?" + i_PID + "page=" + i_i.ToString() + "'>" + i_i.ToString() + "</a> ";i_pagerString_ENG =i_pagerString_ENG + "<a class='" + i_CssClass + "' href='?" + i_PID + "page=" + i_i.ToString() + "'>" + i_i.ToString() + "</a> ";}else{i_pagerString = i_pagerString + "<b><font color=red>" + i_i.ToString() + "</font></b> ";i_pagerString_ENG =i_pagerString_ENG + "<b><font color=red>" + i_i.ToString() + "</font></b> ";}}if (i_EndPageNum < i_Pcount){i_pagerString = i_pagerString + "<aclass='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_EndPageNum + 1).ToString() + "' title='下十页'><font face='webdings'>8</font></a>";i_pagerString_ENG = i_pagerString_ENG + "<a class='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_EndPageNum + 1).ToString() + "' title='Next Ten'><font face='webdings'>8</font></a>";}i_pagerString = i_pagerString + "] 页";i_pagerString_ENG = i_pagerString_ENG + "] ";if (i_pageIndex != 1){i_pagerString = i_pagerString + "<aclass='" + i_CssClass + "' href='?" + i_PID + "page=1'>首页</a><a class='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_pageIndex - 1).ToString() + "'>上一页</a>";//i_pagerString_ENG =i_pagerString_ENG + "<a class='" + i_CssClass + "' href='?" + i_PID + "page=1'>首页</a><a class='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_pageIndex - 1).ToString() + "'>上一页</a>";}if (i_Pcount != i_pageIndex){i_pagerString = i_pagerString + "<aclass='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_pageIndex +1).ToString() + "'>下一页</a><a class='" + i_CssClass + "' href='?" + i_PID + "page=" + i_Pcount + "'>尾页</a>";i_pagerString_ENG = i_pagerString_ENG + "<a class='" + i_CssClass + "' href='?" + i_PID + "page=" + (i_pageIndex + 1).ToString() + "'> Next</a><a class='" + i_CssClass + "' href='?" + i_PID + "page=" + i_Pcount + "'>End</a>";}i_pagerString = i_pagerString + "</div>";i_pagerString_ENG = i_pagerString_ENG +"</div></div>";if (_Language == MyEnumLanguage.English){return i_pagerString_ENG;}else{return i_pagerString;}}//将HTML代码加入输出流protected override void Render(HtmlTextWriter output){base.Render(output);switch (_DisplayPageing){case MyEnum.Always:output.WriteLine(ThePage(_recordcount, _pageSize, _pageIndex, _PID,_CssClass));break;case MyEnum.Auto:if (_pageSize < _recordcount){output.WriteLine(ThePage(_recordcount, _pageSize, _pageIndex, _PID,_CssClass));}else{output.WriteLine("");}break;case MyEnum.Never:output.WriteLine("");break;}//if (_DisplayPageing == true)output.WriteLine(ThePage(_recordcount, _pageSize, _pageIndex, _PID,_CssClass));// output.WriteLine(ThePage(_recordcount,_pageSize, _pageIndex, _PID, _CssClass));}}}。