动态生成DropDownList控件后,在选择改变时获得DropDownList.SelectedItem.Text的值

永远爱好写程序 2004-02-15 08:29:56
代码如下,请问如何实现在DropDownList控件选择改变时(SelectedIndexChanged事件)
让ViewState["UpdateDepartmentName"])得到当前选择的文本??
要求以上功能在如下的DataGrid1_ItemDataBound事件中实现

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.EditItem)
{
DropDownList ddl=new DropDownList();
DataSet objDs=new DataSet();
objDs=clsBase.ExecuteSQL("Select DepartmentName from tblDepartment");
ddl.DataSource=objDs.Tables[0].DefaultView;
ddl.DataTextField="DepartmentName";
ddl.DataValueField="DepartmentName";
ddl.DataBind();
if(e.Item.Cells[5].Controls[0].ToString()=="System.Web.UI.WebControls.TextBox")
{
TextBox txtBox=(TextBox)e.Item.Cells[5].Controls[0];
ddl.SelectedIndex=0;
while(e.Item.Cells[5].Controls.Count>0)
{
e.Item.Cells[5].Controls.RemoveAt(0);
}
e.Item.Cells[5].Controls.Add(ddl);
ViewState["UpdateDepartmentName"]=ddl.SelectedItem.Text;
}
}
}
...全文
44 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
这篇文章中我们重点需要实现的是(3)、(4)两项功能,下面我们来介绍具体实现的方法。 第一步,实现ImageComboBoxItem类。 要实现显示图标,当然要给每个项添加与图标相关的信息了,ImageComboBoxItem类应该包括以下内容:文本(Text)、缩进的级别(Level)、图标的索引(ImageIndex、ImageKey),用户数据(Tag)。ImageComboBoxItem类实现了ISerializable接口,实现自定义序列化。ImageComboBoxItem类的类视图如下: 图3 ImageComboxItem类视图 ImageComboBoxItem类的代码如下: [Serializable] [DefaultProperty("Text")] [TypeConverter( typeof(ExpandableObjectConverter))] public class ImageComboBoxItem : IDisposable, ISerializable ...{ Fields#region Fields private ImageComboBox _imageComboBox; private string _text = "ImageComboBoxItem"; private ImageComboBoxItemImageIndexer _imageIndexer; private object _tag; private int _level; #endregion Constructors#region Constructors public ImageComboBoxItem() ...{ } public ImageComboBoxItem(string text) : this(text, -1, 0) ...{ } public ImageComboBoxItem( string text, int imageIndex) : this(text, imageIndex, 0) ...{ } public ImageComboBoxItem( string text, string imageKey) : this(text, imageKey, 0) ...{ } public ImageComboBoxItem( string text, int imageIndex, int level) : this() ...{ _text = text; ImageIndexer.Index = imageIndex; _level = level; } public ImageComboBoxItem( string text, string imageKey, int level) : this() ...{ _text = text; ImageIndexer.Key = imageKey; _level = level; } protected ImageComboBoxItem( SerializationInfo info, StreamingContext context) : this() ...{ Deserialize(info, context); } #endregion Properties#region Properties [Localizable(true)]
ExtAspNet v2.2.1 ExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+ 注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。 示例: http://extasp.net/ 开源: http://extaspnet.codeplex.com/ 博客: http://sanshi.cnblogs.com/ 邮箱: sanshi.ustc@gmail.com 发布历史: +2010-03-28 v2.2.1 +为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 -修正此函数通过PageContext.RegisterStartupScript调用不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 +集成Extjs最新版本v3.1.1。 -增加一个新的Theme - Access。 -修正了Firefox下Zoom In/Out页面消失的BUG。 -删除Panel的EnableLightBackgroundColor属性,同EnableBackgroundColor只支持Blue和Gray两种Theme。 +2010-01-31 v2.2.0 -使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(feedback:261629698)。 +TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip控件动态增加删除Tab。 -增加示例tabstrip/tabstrip_addtab.aspx。 -重构了示例网站的架构,目前只有一层IFrame结构。 -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 -为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal="false")(feedback:zqmars)。 -Window控件更新。 -关闭按钮默认直接关闭,不会弹出确认对话框。 -GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。 -增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -WindowPosition默认居中,而不是黄金分割位置。 +Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举Self, Parent, Top。 -Confirm.GetShowReference的最后一个参数target变为枚举类型。 -Alert.GetShowReference中的showInParent参数也变为Target枚举类型。 -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。 -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 -使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。 -使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。 -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。 -修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。 -修正HtmlEditor不能编辑的BUG(feedback:TheBox)。 -修正IE下有会出现空白页面的情况(feedback:olivia919)。 +2009-12-06 v2.1.8 -修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。 -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的皮肤Gray。 -为示例工程添加改变语言和皮肤的下拉列表。 -为PageContext增加静态函数Refresh,在切换语言和皮肤使用。 +2009-12-01 v2.1.7 -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。 -BorderPanel更名为RegionPanel。 -DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。 -增加中国的省市县三级联动示例(data/shengshixian.aspx)(feedback:Blues T)。 -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。 -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。 +2009-11-26 v2.1.6 +修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。 -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。 -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 +2009-11-21 v2.1.5 +Tree优化。 -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 -GetNodeById更名为FindNode,保持和FindControl一致命名。 -删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。 -删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。 -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 -Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。 -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 -为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。 -增加示例(other/custom_postback.aspx)(feedback:thebox)。 -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 -为Tree增加AutoLeafIdentification属性。 -增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。 +2009-11-17 v2.1.4 -修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。 -部分ExtAspNet控件的设计支持(会在后续版本中逐步完善)。 -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计属性,和运行是否保持状态没有关系。 -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。 +为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败提示信息。 -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 +为表单字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。 -增加示例:form/form_validate.aspx +2009-10-19 v2.1.3 +增加支持在AJAX改变控件属性列表(/ajax.aspx)。 -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)。 -在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。 -更新/basic/login.aspx示例,使用验证图片(feedback:kedee)。 -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_autopostback.aspx(feedback:chenguizhu2006)。 -为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。 -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。 -修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。 -增加pt_BR语言,由Ujvari提供。 +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 -所有Icon的列表在icon.aspx。 -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的)增加Icon属性。 +2009-09-15 v2.1.1 -修正不能动态修改AccordionPane属性Items的BUG。 +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window控件的Target="_parent")。 +为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。 -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference()); +TreeNode的前面的多选框可以自动回发了。 -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 -示例在:http://extasp.net/data/tree_run.aspx -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定控件Timer,用来定发起AJAX请求。 +2009-09-06 v2.1.0 -Button的Pressed属性能够正确的反映客户端的变化。 -优化Tree控件的AJAX实现。 +为页面的Form添加autocomplete="off"属性。 -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 +添加对extjs3.0中所有语言的支持。 -ExtAspNet扩展的多语言包在js\languages\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现 -你可以向其中添加自己的语言版本,并执行js\languages下的pack.bat打包,最后编译工程。 +2009-09-01 v2.0.9 -为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 -这将会影响所有的aspx页面,所以要特别关注。 -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). +所有的面板默认有两个集合属性(Toolbars和Items). -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此Items是只读的). -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 -祝你生日快乐 - 小师妹妹。 +2009-08-29 v2.0.8 -ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 -将所有的示例转化为英语版本。 -修正Tree控件的一个BUG(定义Mappings属性)。 +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。 +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。 +2009-08-25 v2.0.7 -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的了。 -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 +2009-08-14 v2.0.6 -动态生成菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(feedback:shguo)。 -优化AJAX的内部实现,每个页面保存的ViewState现在减少1/3左右(重要更新)。 -优化Tree节点的NodeId自动生成,减少ViewState占用。 +2009-08-09 v2.0 beta5 +ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。 -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior="false" --也就是说生成的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 --我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。 -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 -FCKEditor和上传控件兼容。示例在aspnet\fileupload_run.aspx。 -修正ToolbarText的文本在AJAX下更新的BUG。 -Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。 -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 +2009-08-02 v2.0 beta4 +和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。 -采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。 -现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。 -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 -Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。 -修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。 -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 -增加Menu和Accordion的示例。 -修正Window控件的IconUrl有不显示(Target="_parent")的BUG[feedback:xmq&mgzhenhong]。 +2009-07-22 v2.0 beta3 -兼容FCKEditor。 -在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。 +2009-07-13 v2.0 beta2 -集成extjs最新版本v3.0。 +兼容IE6.0-7.0-8.0。 -这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 -目前先禁用IE6.0-7.0的QuickTips。 -优化底层JavaScript。 +2009-07-05 v2.0 beta1 -更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。 -使用YUI Compressor压缩JavaScript和CSS文件。 -Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。 -ExtAspNet自身的CSS会紧挨着页面标签引入,这样在<head>中自定义的样式可以覆盖ExtAspNet缺省样式。 +Alert对话框会遮挡所有的Window窗口。 -使用一个变通的方法解决,因为无法<em>改变</em>Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 -更新示例工程。 +2009-03-25 v1.3.1 -Tree在AJAX回发展开节点<em>时</em>JS错误[feedback:xlli]。[fixed] -Window中的EnableIFrame==false,则点击关闭按钮<em>时</em>报JS错误。[fixed] -页面包含FileUpload<em>控件</em>,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx)[fixed] -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。[fixed] +2009-03-03 v1.3.0 -如果弹出的窗口(Ext-Window)含有ASP.NET<em>控件</em>FileUpload,则此弹出窗口在关闭<em>时</em>出现JS错误(http://extjs.com/forum/showthread.php?t=8129)[feedback:xlli]。[fixed] -如果页面中存在ASP.NET<em>控件</em>(<em>Text</em>Box),则第二次提交表单就会报错(视图状态不对,其实<em>时</em>没有更新EventValidation隐藏字段导致的问题)。[fixed] -页面上放置ExtAspNet-Button和ASP.NET-Button,则点击ExtAspNet-Button<em>时</em>激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。[fixed] -ExtAspNet内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。[added] +如果以前你听过不要在ExtAspNet工程中使用ASP.NET标准<em>控件</em>的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet<em>控件</em>和ASP.NET标准<em>控件</em>和平共处了。[fixed] -如果一个ASP.NET按钮<em>控件</em>要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 -如果要在一次ExtAspNet的原生AJAX回发<em>时</em>更新ASP.NET<em>控件</em>的<em>值</em>,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 +2009-02-27 v1.2 beta9 -网络连接出错<em>时</em>的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed] -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed] +系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed] -底层使用Javascript创建一个Window<em>控件</em>的代码由原来的2000字符减少为500个字符。 -PageCon<em>text</em>静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。 ---[updated]删除PageCon<em>text</em>中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串 -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageCon<em>text</em>.GetFormModifiedConfirmReference获取此方法的客户端脚本。 ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误! -A页面有Ext-Window<em>控件</em>弹出B页面,B页面有Ext-Window<em>控件</em>弹出C页面,B页面的Ext-Window<em>控件</em>设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 ---当<em>时</em>如果用户直接访问B页面,就会报JS错误,因为此<em>时</em>找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 -Window<em>控件</em>的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单<em>改变</em>,然后关闭弹出窗口的客户端脚本”。 ---为Window<em>控件</em>增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单<em>改变</em>,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 ---Window<em>控件</em>的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。 ---现在可以很方便的为Window<em>控件</em>的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 -如果弹出窗口(Window<em>控件</em>)中IFrame的页面不能正常加载(网络暂<em>时</em>出错或页面抛出异常),则此<em>时</em>点击右上角的关闭按钮会报JS错误,因为此<em>时</em>页面尚未加载完毕。 ---此版本修正了这个BUG,即<em>时</em>页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 -Window<em>控件</em>的IFrameName属性是自动<em>生成</em>的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 -CurrentActiveWindow改名为ActiveWindow。 -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values) ---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。 +2009-02-23 v1.2 beta8 -ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed] -<em>DropDown</em><em>List</em>在Ajax回发<em>时</em>不能计算模拟树的数据[feedback:huihuang]。[fixed] -<em>DropDown</em><em>List</em>在页面第一次加载<em>时</em>没有不可<em>选择</em>项,则回发<em>时</em>也不会有不可<em>选择</em>项的BUG。[fixed] -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed] -页面加载过程中的<em>时</em>间信息保存在Javascript变量window.box.timeInfo中。[added] +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed] +2008-10-28 v1.2 beta7 -<em>DropDown</em><em>List</em>没有选中任何一项,回发<em>时</em>报错[feedback:huihuang]。[fixed] -Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed] +PageCon<em>text</em>优化。[fixed] -去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 -去除RegisterStartupScript的重载函数,只保留最简单的PageCon<em>text</em>.RegisterStartupScript(string script)函数。 -Resirect增加重载函数Redirect(string url, string target),其中target可能的取<em>值</em>为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。 -Image<em>控件</em>增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[feedback:jqpeng]。[fixed] -发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。[fixed] -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed] -Row和Column布局<em>时</em>,修正IE下设置RowHeight="100%"<em>时</em>显示不正确的BUG。[fixed] -AccordionLink当鼠标移上和移开<em>时</em>,有背景色的变化效果[feedback:huihuang]。[fixed] +TabStrip的Tab<em>控件</em>的EnablePostBack属性会在回发<em>时</em>保持(也即是说如果EnablePostBack=true,回发<em>时</em>没<em>改变</em>EnablePostBack的<em>值</em>,则每次切换到此Tab都会回发)。[fixed] -有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 +2008-10-20 v1.2 beta6 +使用<em>控件</em>的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed] -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 +<em>DropDown</em><em>List</em>优化。[fixed] -去除EnableFirstItem/FirstItem<em>Text</em>/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 现在可以方便的在后台<em>DropDown</em><em>List</em>1.Items.Insert(0, new ExtAspNet.<em>List</em>Item("全部", "-1"));来达到同样的效果。 +如果某项(<em>List</em>Item)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。 -和Asp.net中的保持一致,<em>List</em>Item的Value<em>值</em>可以为空字符串。 也就是可以这样写<em>DropDown</em><em>List</em>1.SelectedValue = ""; -<em>List</em>ItemCollection增加重载函数Add(string <em>text</em>, string value),这样方便后台添加列表项。 -处于布局内的容器<em>控件</em>(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed] -注意,<em>控件</em>的高度指的是整个<em>控件</em>的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。[fixed] +为所有<em>控件</em>属性增加在VS中的智能提示。[fixed] -需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll<em>时</em>xml会被拷贝到bin目录下,提供VS的智能提示。 +<em>控件</em>的属性如果是枚举类型,如果此属性可以不取<em>值</em>,则默认为None。[fixed] -TriggerIconType.Default -> TriggerIconType.None -SystemIconType.Empty -> SystemIconType.None -RegexPattern.USER_DEFINED -> RegexPattern.None -表单验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。[fixed] +注意:一个属性可以拥有多个<em>值</em>的情况。[fixed] -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 +AccordionLink实现为<em>控件</em>。[fixed] -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[feedback:jima]。 +确认:可以方便的<em>动态</em>添加<em>控件</em>,并且可以给<em>控件</em>添加服务器端事件(示例在form/form_dynamic_run.aspx)。[fixed] +2008-10-15 v1.2 beta5 -验证表单字段的ValueToCompare属性,为字符串<em>时</em>会出错的BUG。[fixed] +优化下拉列表。[fixed] -验证下拉列表<em>时</em>,应该取<em>List</em>Item的Value属性进行验证,而不是<em>Text</em>属性。 -<em>DropDown</em><em>List</em>的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 -<em>DropDown</em><em>List</em>不支持Empty<em>Text</em>属性。 -<em>List</em>Item启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可<em>选择</em>,以及创建模拟下拉树。 -<em>DropDown</em><em>List</em>增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 +2008-09-27 v1.2 beta4 +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会<em>改变</em>Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。[fixed] -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed] +AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。[fixed] -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上<Items>标签。 -适当增大AccordionPanel中链接的高度20px->22px,同<em>时</em>对链接的样式也做了微调。 -通过BodyPadding控制链接列表的边距。 -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台<em>动态</em>添加链接,效果很赞,此需求由马季提出。 +2008-09-25 v1.2 beta3 +代码优化与设计<em>时</em>支持(尚需要不断完善,目前可以在ASPX页切换到“设计<em>时</em>”,方便属性的更改和事件处理函数的添加)。[fixed] -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading -TabStrip/Toolbar -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed] -向Form中<em>动态</em>添加<em>控件</em>的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。[fixed] +大部分容器的子<em>控件</em>集合更正为Items(以前有些是Rows)。[fixed] -影响的<em>控件</em>包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 -保留TabStrip的Tabs(TabCollection)属性。 -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 -预祝今晚神七发射成功。 +2008-09-22 v1.2 beta2 +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed] -表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项<em>时</em>数组越界。所有使用box<em>控件</em>的应用程序都受到此BUG的影响,需尽快更新到新版本。 +代码优化与设计<em>时</em>支持(示例中表单<em>控件</em>都已支持设计)。[fixed] -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/<em>Text</em>Box -TriggerBox/TwinTriggerBox/Window/<em>Text</em>Area/HtmlEditor/DatePicker/NumberBox -CheckBox/RadioButton/RadioButton<em>List</em>/<em>DropDown</em><em>List</em> -Grid +2008-09-19 v1.2 beta1 -Image/LinkButton/HyperLink增加一些Ajax可更新属性。[fixed] +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。[fixed] -修正Form/SimpleForm中隐藏一个表单字段(Hidden=false)会占据页面空间的BUG。 -Toolbar<em>Text</em>/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed] -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果)[fixed] +2008-09-09 v1.1 +Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在<em>控件</em>中。[fixed] -网报:CssClass="toolbar-pagemenu" CssStyle="border:0px;",同<em>时</em>定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。[fixed] -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。[fixed] +布局整理。[fixed] -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 -其中一些<em>控件</em>默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局<em>控件</em>默认的布局是Container。 -经常用到的布局<em>控件</em>:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor +2008-09-08 v1.1 beta7 -MenuButton/MenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [feedback:huayu]。[fixed] -MenuButton/MenuHyperLink/MenuSeparator/Menu<em>Text</em>增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax<em>时</em>显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed] +大部分的ExtAspNet<em>控件</em>增加Hidden属性(少数几个<em>控件</em>没有此属性:Menu),这样在Ajax<em>时</em>可以显示隐藏<em>控件</em>。[fixed] -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的<em>控件</em>渲染到客户端但是隐藏。 -US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。 -网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。 +2008-09-04 v1.1 beta6 -PageCon<em>text</em>.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed] +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed] -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多<em>控件</em>(Grid,<em>DropDown</em><em>List</em>,TabStrip)。 -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 -<em>DropDown</em><em>List</em>在Ajax<em>时</em>应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed] -Button/MenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed] -Tree的Ajax支持(尚需优化)。[fixed] +2008-09-02 v1.1 beta5 -<em>DropDown</em><em>List</em>如果第一次没有绑定<em>值</em>,应该绑定到[[]](二维数组),而不是[](一维数组)。[fixed] -模拟树的<em>DropDown</em><em>List</em>,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载<em>时</em>,即使没有数据也需要设置Data<em>Text</em>Field/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的<em>值</em>,否则Ajax回发<em>时</em>会出错)。[fixed] -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector<em>控件</em>(以后不会用AspnetAjax,这个<em>控件</em>已经完成使命)。[fixed] -不要使用Asp.net的<em>控件</em>HiddenField,而是使用ExtAspNet的HiddenField,因为Asp.net的<em>控件</em>在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed] -网报Ajax整合基本完成(除了待审批->下一步[审核/归档/出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed] -IE下,RadioButton<em>List</em>中项如果存在汉字,则会换行的BUG。[fixed] -增加两个Theme[Slate/Black](样式尚需完善)。[fixed] +2008-09-01 v1.1 beta4 -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed] -RadioButton<em>List</em>去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父<em>控件</em>(SimpleForm/Form)的背景色一致。[fixed] -TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed] -Web.config中增加配置项FormLabelWidth="80"(默认为80),同<em>时</em>PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的表单字段标题的宽度。[fixed] +完善Ajax。[fixed] -RadioButton<em>List</em>增加Ajax可更新属性SelectedIndex(SelectedValue/<em>SelectedItem</em>)。 -<em>DropDown</em><em>List</em>增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/<em>SelectedItem</em>)/DataSource。 -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发<em>时</em>隐藏显示了一些,也能正确的Ajax)。 -Toolbar<em>Text</em>增加Ajax可更新属性<em>Text</em>。 +2008-08-31 v1.1 beta3 -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed] -重定向页面,使用系统的方法 PageCon<em>text</em>.Redirect(string url),使用Response.Redirect方法会出错。[fixed] +安全的Ajax设计。[fixed] -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同<em>时</em>在速度上会有进一步的提升。 -基本思想:安全的Ajax交互,明确Ajax回发<em>时</em>支持<em>控件</em>哪些属性的<em>改变</em>,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供<em>控件</em>级别的EnableAjax属性。 -整理支持Ajax的<em>控件</em>属性<em>改变</em>列表(所有被支持的属性<em>改变</em>都是安全的、快速的,所有不被支持的属性<em>改变</em>不会对UI起作用,同<em>时</em>是安全的,不会有js错误)。 -网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed] +2008-08-29 v1.1 beta1 +Window<em>控件</em>是否弹出的状态在回发<em>时</em>维持。[fixed] -<em>控件</em>设计的一个原则,凡是可以在客户端<em>改变</em>的属性都应该在回发<em>时</em>保持属性的状态。 +完全抛弃Asp.NetAjax,ExtAspNet<em>控件</em>内置Ajax支持。[fixed] -这是一个<em>值</em>得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。 -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 +在这种设计下,其实可以完全抛弃Javascript。 -比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 -推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。 +目前ExtAspNetAjax的限制。 -只对ExtAspNet<em>控件</em>起作用,对Asp.net<em>控件</em>不起作用。 -对容器<em>控件</em>(有子<em>控件</em>的<em>控件</em>)不起作用,只对最底层的<em>控件</em>起作用。 -对<em>改变</em><em>控件</em>的Visible属性会有错误。 -Window<em>控件</em>的属性<em>改变</em>只有少数几个起作用(Popup,IFrameUrl)。 -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading<em>控件</em>。[fixed] -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed] -Grid选中行的状态在第一次回发<em>时</em>不能保持的BUG。[fixed] +2008-08-26 v1.0 +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 -主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能<em>时</em>要禁用此插件。 +优化弹出窗口中IFrame的显示速度。[fixed] -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建<em>时</em>间。 -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor="#CADDF7",以便分隔符的颜色和Toolbar的颜色一致)[fixed] +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed] -一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的<em>值</em>)(示例在default.aspx)。 -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed] +TabStrip中非当前Tab会延迟渲染。[fixed] -这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染<em>时</em>间。 -由于非当前Tab不会在页面加载<em>时</em>渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到<em>控件</em>的render事件中。 -不能比较两个DataPicker大小的BUG。[fixed] -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed] -全新的ExtAspNet.Examples(基础知识/表单<em>控件</em>/数据绑定/容器布局/IFrame框架)。[fixed] +2008-08-19 v0.4 beta6 +PageManager增加两个属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。[fixed] -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 -RadioButton<em>List</em>放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed] +extjs的BUG,当页面中含有iframe<em>时</em>,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.php?t=43246)(示例在test.aspx)[fixed] -现在的解决方法是在初始化<em>时</em>:if(this.initialized){return;}this.initialized=true; +需要先回发页面再弹出IFrame窗口。[fixed] -在回发<em>时</em>设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口<em>时</em>要注意设置Popup=false。 -另一种做法(推荐):PageCon<em>text</em>.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 +2008-08-15 v0.4 beta5 -点击关闭窗口的按钮,在IE6下会有JS错误。[fixed] -增加BorderLayout<em>控件</em>,示例在iframe/borderlayout.aspx。[fixed] +Radiobutton<em>list</em>显示有重影(示例在radio.aspx)。[fixed] -全新的样式。 -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 -GetValueReference取得的<em>值</em>不正确的BUG。 -<em>动态</em>向Form中添加FormRow,并<em>动态</em>的向FormRow中添加表单字段,以及如何取得表单字段的<em>值</em>。(示例在form_dynamic.aspx)[fixed] +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed] -这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本<em>改变</em>的IFrameUrl会在回发<em>时</em>保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的<em>改变</em>,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) +2008-08-13 v0.4 beta4 -点击关闭窗口的按钮,在IE下会有JS错误。[fixed] -Window的右上角关闭图标增加提示,优化事件响应。[fixed] -Window的代码重构。[fixed] +修正一个的内存泄漏。[fixed] -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 -内存存在泄漏<em>时</em>,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 -IE窗口最小化<em>时</em>,IE会自动进行垃圾回收。 +2008-08-12 v0.4 beta3 -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed] -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。[fixed] +页面正在加载的提示尽早的显示出来。[fixed] -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 +2008-08-08 v0.4 beta2 -TabStrip延<em>时</em>加载出错。[fixed] -Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_ExtAspNet/FE_ApplyEditor.aspx。[fixed] -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。[fixed] -实现网报首页下拉菜单和左侧菜单的导航功能。[fixed] -Window的创建在页面显示后进行,不计算在js渲染<em>时</em>间内。[fixed] -优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed] -button_iframe.aspx默认会加载form.aspx页面(Window<em>控件</em>的BUG)。[fixed] -Window中的保存并关闭按钮和Asp.netAjax冲突。[fixed] -优化关闭Window的js脚本,减少写到页面的js大小。[fixed] -加快“保存并关闭”按钮关闭窗口的速度,使用PageCon<em>text</em>.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed] +2008-08-05 v0.4 beta1 -<em>DropDown</em><em>List</em>去除Traditional属性,和传统的Asp.net<em>控件</em>一样不可编辑。[fixed] -<em>DropDown</em><em>List</em>增加Selected<em>Text</em>属性(去除了模拟树<em>时</em>通过<em>SelectedItem</em>.<em>Text</em>的多余html字符)。[fixed] -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed] -将<em>生成</em>的js对象的名称简单化,这样可以减少<em>生成</em>的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。[fixed] +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed] -因为在页面的Page_Load中,if (!IsPostBack){PageCon<em>text</em>.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发<em>时</em>没有注册到页面,因为js调用此脚本<em>时</em>报错。 -一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。 -另一种办法就是在PageManager<em>控件</em>中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容<em>改变</em>的脚本)的属性(会在每次页面回发(包含ajax回发)<em>时</em>注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 +PageManager<em>控件</em>增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed] -这个手工添加onReady函数能够在每次页面回发<em>时</em>都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。 -每个页面必须添加一个PageManager<em>控件</em>,否则会出错,同<em>时</em>去除DesignTimeStyle<em>控件</em>(作为PageManager的属性出现)。[fixed] -<em>Text</em>Field等表单字段增加Readonly属性。[fixed] +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。[fixed] -最大的好处是可以减少页面下载完毕后Javascript渲染<em>时</em>间(可以节约一般的渲染<em>时</em>间)。(所有示例在iframe文件夹下) +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window<em>控件</em>增加一个属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 -显然,<em>控件</em>本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口<em>时</em>,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B<em>时</em>,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 -示例4,弹出窗口中的弹出窗口。 -对整个Examples更新测试。[fixed] +2008-07-31 v0.3 beta12 -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed] -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同<em>时</em>第二次打开Window中的IFrame不会有残影出现。[fixed] -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed] -Tree<em>控件</em>,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed] +规范关闭窗口<em>时</em>提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。[fixed] -内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageCon<em>text</em>.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。 -参照Yslow的评分规则,将JS文件引用由head移动到body中。[fixed] -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed] +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx)[fixed] -增加PageManager<em>控件</em>(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 +2008-07-24 v0.3 beta11 -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同<em>时</em>每个表单字段都增加OffsetRight属性 [feedback:jima]。[fixed] -Window在回发<em>时</em>设置的Title不起作用的BUG。[fixed] -增加Image<em>控件</em> [feedback:jima]。[fixed] -Tree<em>控件</em>,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed] -Image增加ToolTipTitle/ToolTipAutoHide两个属性,当提示信息特别长<em>时</em>,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed] -去掉<em>DropDown</em><em>List</em><em>控件</em>的<em>Text</em>属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed] -过滤提示消息中的换行符(转换为<br/>),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed] +2008-07-23 v0.3 beta10 +完善Tree<em>控件</em>。[fixed] -如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。 -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 -更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。 -Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码![fixed] -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。[fixed] +2008-07-22 v0.3 beta9 +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed] -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed] -虽然最后未能解决<div style="width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;"><div style="width: 16px; height: 18px; float: left;">##</div>差旅交通费</div>在IE和Firefox下显示的不同效果。 -但是通过用<img src="##" />来代替<div style="background:url(##)" />,从而实现FF和IE下样式的统一。 -刚看到old9的解决方案:把“差旅交通费”改成“<span style="margin-right: -1000px;">差旅交通费</span>”,在IE下和FF下的都不换行,:-) -LinkButton增加OnClick事件 [feedback:huihuang]。[fixed] -Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed] +增加树<em>控件</em>(Tree)(示例在tree2.aspx)。[fixed] -可以在回发<em>时</em>维持树的状态(选中行,折叠/展开,CheckBox)。 -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 +2008-07-16 v0.3 beta8 +ContentPanel中放置ExtAspNet<em>控件</em>,则渲染<em>时</em>会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed] -隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet<em>控件</em>,如果容器的display='none',则会出现各种问题(主要是大小不对)。 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。 +IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。[fixed] -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 -最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();): 示例在 Site.Master 页面。 +集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当<em>改变</em>窗口大小<em>时</em>你会惊讶的发现内容区域的内容全部为空了![fixed] -解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), 这样的代码让我想起刷新窗口<em>时</em>那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 +2008-07-14 v0.3 beta6 -增加FlashObject<em>控件</em>。[fixed] -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed] -Accordion选中样式微调。[fixed] -预加载Form表单出错<em>时</em>提示信息的背景图片。[fixed] +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed] -因为延迟加载数据不会<em>改变</em>Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 -<em>改变</em>Grid中静态的CheckBoxField图片。[fixed] -TabStrip增加TabIndexChanged事件,同<em>时</em>Tab增加EnablePostBack,可以在点击一个Tab<em>时</em>引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed] +2008-07-12 v0.3 beta5 -页面菜单Toolbar的分割符和背景不相融合。[fixed] -表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同<em>时</em>增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed] -如果是同种类型的表单字段,不需要指定CompareType,比如两个NumberBox比较<em>值</em>的大小不需要指定CompareType,而一个NumberBox和<em>Text</em>Box比较大小需要指定CompareType。 +如果在编辑页面使用AspNetAjax,则不能在回发<em>时</em>关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。[fixed] -这是由于ajax后执行的javascript中不能有return false语句。 +在文本框失去焦点<em>时</em>,执行一些Javascript脚本(示例在<em>text</em>box_blur.aspx) [feedback:xmzhu]。[fixed] -在页面添加onReady函数(会被系统调用),然后用javascript监视文本框<em>值</em>的<em>改变</em>。 -弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window<em>控件</em>的IFrameUrl指向这个页面而不是"#"。[fixed] +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮<em>时</em>会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed] -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed] +增加Menu、Menu<em>Text</em>、MenuSeparator、MenuButton、MenuHyperLink<em>控件</em>,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed] -增加SplitButton<em>控件</em>。[fixed] +2008-07-09 v0.3 beta4 -DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed] +Form表单字段(<em>Text</em>Box,<em>DropDown</em><em>List</em>...)之间可以比较大小 [feedback:huihuang]。[fixed] -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed] -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活<em>时</em>才设置Url。 -RadioButton<em>List</em>增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed] -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed] +表单字段Enable=false<em>时</em>显示颜色太浅 [feedback:jima]。[fixed] -覆盖缺省样式的.x-item-disabled,设置不透明。 +2008-07-08 v0.3 beta3 -Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed] +增加HiddenField<em>控件</em>。[fixed] -其实用<em>Text</em>Box也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 +TriggerBox 如果 Enable<em>Text</em>Box = true,则不能将<em>Text</em>回发(这是html的限制)。[fixed] -最后的解决方案居然是设置 readonly=true,同<em>时</em>更改属性为 Readonly(示例在<em>text</em>box2.aspx)。 -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed] +控制下拉列表某些项不可以<em>选择</em>(示例在<em>dropdown</em><em>list</em>2.aspx)。[fixed] -增加 DataEnableSelectField 属性,不可<em>选择</em>的项变灰,并且鼠标经过<em>时</em>没有样式。 -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed] +2008-07-07 v0.3 beta2 +增加UpdatePanelConnector<em>控件</em>,支持在布局构建的页面使用Asp.net Ajax。[fixed] -使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。 -示例在ajax3.aspx/content_page4.aspx。 -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 +2008-07-03 v0.3 beta1 +容器<em>控件</em>的AutoHeight/AutoWidth默认为false。[fixed] -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 +增加UserControlConnector,可以在其中放置用户<em>控件</em>(示例在page_usercontrol.aspx)。[fixed] -也可以在ContentPanel中放置用户<em>控件</em>,注意两者的区别。 +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed] +支持Asp.net ajax异步加载。[fixed] -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 -对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。 +2008-07-02 v0.2 beta12 +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx)[fixed] -支持Iframe内按钮和window右上角关闭按钮。 -删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed] -在Firefox下还有问题。[fix pending] +排序<em>时</em>在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed] -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。[fixed] -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed] -可以在ContentPanel中放置用户<em>控件</em>(示例在page_usercontrol.aspx)。[fixed] +2008-06-30 v0.2 beta11 -增加TwinTriggerBox<em>控件</em>(示例在twintriggerbox.aspx)。[fixed] -Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录<em>时</em>总记录数不会变化 [feedback:zgjiang2]。[fixed] -关闭Window<em>时</em>PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed] -如果表单验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。[fixed] +页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx)[fixed] -目前还不支持Window右上角关闭按钮的提示保存功能。 -Master/Content的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed] -Grid中的LinkButtonField设置Confirm<em>Text</em>会出错 [feedback:huihuang]。[fixed] -增加静态类Confirm。[fixed] +2008-06-27 v0.2 beta10 +Grid完善。[fixed] -CheckBoxField在回发<em>时</em>不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示<em>时</em>的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 -切换分页<em>时</em>清空选中的<em>值</em> [feedback:jqpeng]。 -增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。 -<em>DropDown</em><em>List</em>模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在<em>dropdown</em><em>list</em>_simulate_tree.aspx)。 +2008-06-25 v0.2 beta9 +Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx/simpleform.aspx)[fixed] -在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。 +关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading<em>控件</em>,这样效果统一。[fixed] +Grid完善。 -去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在ASP.NET应用中会有很多问题(主要是状态保持的问题)。 +EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx) -使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函数中重新绑定数据。 +增加AllowPaging属性。(示例在grid_paging.aspx) -使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函数中Grid1.PageIndex = e.NewPageIndex;OK。 +数据库分页支持。(示例在grid_database_paging.aspx) -使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定<em>时</em>设置RecordCount为总的记录数,在OnPageIndexChange事件处理函数中Grid1.PageIn</a></div><div data-report-view="{"mod":"popu_645","index":"4","dest":"https://download.csdn.net/download/wode2600/2726130","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1713982881219_78446\"}","spm":"1035.2023.3001.6557"}" class="list-item" data-v-ca2d15ac><div class="recommend-title" data-v-ca2d15ac><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAltJREFUWEdjZGBgYGhv/yD45//nEEYGBrX//xj4QWK0AoxMDB//MzDcYmHkXVNZKfCeEWz5v8/1DP8ZuGhlKVZzGRm+sTDxNjI2tz1OZfjHYEpXy2GWMTGcZmxpe9xN62DH5TlQdDA2tzyeNSC+h1o66gCyQyApUdRNSIhNGBSS7979ejtv/utd5EQl2Q7IypT0ExJiFoc44O/LadOfbxp1wPAOAWlpdr5Pn//8/Pzp70+QT3GlAX5+ZnYeHhb2p09/fiImRIhOhBYWvIo21ryWu/Z8PHDp4tdn2BxgoM8l4+IiYH/k6OdjJ058vk91B7g487swMDD8v3Hj+2VJSTYpfn5mEZAlHz/9ffPq5e+Xqqoc2iD+nr0f99DSAQQ9RhMHcHAwsYSGCtvKy7Gr4HPBo0c/b69c/fbwzx///hJ0KQMDA9FpAGaYizO/tpkZjwUTEyMTsgX//v3/d/LUl+N79368RozFMDUkOwCkUUODU8zHW9CFg4OJG8T/8ePf181b3u25efPHK1IsB6nF6gAjY25ZEWFWcNPs169/fw4c+HQD3WBBIRaOsBAhZ5D4qjXv9r5/9+cHuhoHBz4NNjYmFpD4m7e/P547+/UxuhqsDoiPE3WWlWVXgvju/5ee3qfLsfmMiZmBEST+7y/Df2zyJcXSkRwcjDwgucePf95buOj1Xqo6gFBwDw8H/P/P8O/nz//fCPkWmzw7OyMXIyMDOLeQHQXkWIxNz9BygJubgI6kBCu4tUMt8PzF75e7dn24QlQuoJalxJgzCDomA901G/DOKSieBrJ7DgCPdYFAskV/NwAAAABJRU5ErkJggg==" alt data-v-ca2d15ac> <a target="_blank" href="https://download.csdn.net/download/wode2600/2726130" data-report-click="{"mod":"popu_645","index":"4","dest":"https://download.csdn.net/download/wode2600/2726130","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1713982881219_78446\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default" class="title" data-v-ca2d15ac>ExtAspNet_v2.3.2_dll</a></div> <a target="_blank" href="https://download.csdn.net/download/wode2600/2726130" data-report-click="{"mod":"popu_645","index":"4","dest":"https://download.csdn.net/download/wode2600/2726130","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1713982881219_78446\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default" class="desc" data-v-ca2d15ac>ExtAspNet - ExtJS based ASP.NET Controls with Full AJAX Support ExtAspNet是一组专业的Asp.net<em>控件</em>库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+ 注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。 示例: http://extasp.net/ 开源: http://extaspnet.codeplex.com/ 博客: http://sanshi.cnblogs.com/ 邮箱: sanshi.ustc@gmail.com 发布历史: +2010-09-29 v2.3.2 -不绑定任何数据到Grid<em>时</em>,确保页面不会出错。 -修正了Grid列属性DataFormatString的一个bug,比如设置{0:yy-MM-dd HH:mm}<em>时</em>没有效果。 -修正下拉列表<em>控件</em>不能绑定DataTable的BUG(feedback:RedOcean)。 -增加土耳其语言资料文件(feedback:abdullaharslan)。 -Grid的BoundField增加NullDisplay<em>Text</em>属性,用于处理数据库中的null<em>值</em>,如果没有设置则默认为空字符串。 -修正DatePicker中的一个bug(31/01/2010将会返回NULL)使用DateFormatString来<em>生成</em>SelectedDate属性(feedback:OktaEndy)。 -修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的<em>Text</em>,则SelectedValue返回<em>值</em>永远是第一个<em>Text</em>的<em>值</em>(feedback:ben.zhou)。 -应用补丁#6593, #6621(feedback:vbelyaev)。 +修正IE7下Grid分页速度慢(feedback:youwei, StevenGuan, hazardvn, gavindou, ttjacky)。 -实际上IE7下所以的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。 -俄语翻译(feedback:vbelyaev)。 +2010-06-30 v2.3.1 -ExtAspNet<em>控件</em>将不在依赖ViewState,减少1/4左右的HTTP数据传输量。 -<em>控件</em>和示例的增强。 +2010-03-28 v2.2.1 +为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 -修正此函数通过PageCon<em>text</em>.RegisterStartupScript调用<em>时</em>不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 +集成Extjs最新版本v3.1.1。 -增加一个新的Theme - Access。 -修正了Firefox下Zoom In/Out<em>时</em>页面消失的BUG。 -删除Panel的EnableLightBackgroundColor属性,同<em>时</em>EnableBackgroundColor只支持Blue和Gray两种Theme。 +2010-01-31 v2.2.0 -使得Asp.net的<em>控件</em>ImageButton具有和Asp.net的Button<em>控件</em>类似的行为(Ajax提交)(feedback:261629698)。 +TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip<em>控件</em><em>动态</em>增加删除Tab。 -增加示例tabstrip/tabstrip_addtab.aspx。 -重构了示例网站的架构,目前只有一层IFrame结构。 -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 -为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal="false")(feedback:zqmars)。 -Window<em>控件</em>更新。 -关闭按钮默认直接关闭,不会弹出确认对话框。 -GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。 -增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button<em>控件</em>的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -WindowPosition默认居中,而不是黄金分割位置。 +Button, Window等<em>控件</em>弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举<em>值</em>Self, Parent, Top。 -Confirm.GetShowReference的最后一个参数target变为枚举类型。 -Alert.GetShowReference中的showInParent参数也变为Target枚举类型。 -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败<em>时</em>提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。 -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button<em>控件</em>将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 -使用Hidden来显示隐藏ExtAspNet<em>控件</em>,而不是使用Visible属性(Visible目前设置为只读属性)。 -使用Hidden控制Window<em>控件</em>的显示隐藏,Popup已经标记为Obsolete属性。 -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 -增加TabStrip中Tab<em>控件</em>可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。 -修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。 -修正HtmlEditor不能编辑的BUG(feedback:TheBox)。 -修正IE下有<em>时</em>会出现空白页面的情况(feedback:olivia919)。 +2009-12-06 v2.1.8 -修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。 -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的皮肤Gray。 -为示例工程添加<em>改变</em>语言和皮肤的下拉列表。 -为PageCon<em>text</em>增加静态函数Refresh,在切换语言和皮肤<em>时</em>使用。 +2009-12-01 v2.1.7 -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region<em>控件</em>中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。 -BorderPanel更名为RegionPanel。 -<em>DropDown</em><em>List</em>拥有MarkInvalid方法(feedback:sun1299shine)。 -增加中国的省市县三级联动示例(data/shengshixian.aspx)(feedback:Blues T)。 -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。 -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。 +2009-11-26 v2.1.6 +修正<em>动态</em>创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的<em>改变</em>(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。 -为容器<em>控件</em>(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。 -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 +2009-11-21 v2.1.5 +Tree优化。 -修正Expanded项和Checked项的状态在回发<em>改变</em>后不能保持的BUG。 -GetNodeById更名为FindNode,保持和FindControl一致命名。 -删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。 -删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。 -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同<em>时</em>更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 -Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。 -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 -为所有<em>控件</em>增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。 -增加示例(other/custom_postback.aspx)(feedback:thebox)。 -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 -为Tree增加AutoLeafIdentification属性。 -增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。 +2009-11-17 v2.1.4 -修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。 -部分ExtAspNet<em>控件</em>的设计<em>时</em>支持(会在后续版本中逐步完善)。 -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计<em>时</em>属性,和运行<em>时</em>是否保持状态没有关系。 -修正CheckBox<em>控件</em>的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 -为<em>Text</em>Box,<em>Text</em>Area,DatePicker,NumberBox,TriggerBox等<em>控件</em>增加AutoPostBack属性(feedback:dk3214)。 +为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败<em>时</em>提示信息。 -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 +为表单字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。 -增加示例:form/form_validate.aspx +2009-10-19 v2.1.3 +增加支持在AJAX<em>时</em><em>改变</em>的<em>控件</em>属性列表(/ajax.aspx)。 -ExtAspNet支持原生的AJAX,也就是说<em>控件</em>的属性<em>改变</em>在AJAX过程中会反映到页面中,但并不是所有的<em>控件</em>属性都支持AJAX<em>改变</em>。 -加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)。 -在AJAX回发后确保Asp.net的按钮<em>控件</em>仍然具有AJAX的特性。 -更新/basic/login.aspx示例,使用验证图片(feedback:kedee)。 -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_autopostback.aspx(feedback:chenguizhu2006)。 -为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。 -Grid中TemplateField<em>生成</em>到页面中<em>控件</em>具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree<em>控件</em>增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。 -修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。 -增加pt_BR语言,由Ujvari提供。 +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 -所有Icon的列表在icon.aspx。 -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的<em>值</em>)增加Icon属性。 +2009-09-15 v2.1.1 -修正不能<em>动态</em>修改AccordionPane属性Items的BUG。 +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window<em>控件</em>的Target="_parent")。 +为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。 -一个典型应用,在Window<em>控件</em>中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference()); +TreeNode的前面的多选框可以自动回发了。 -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 -示例在:http://extasp.net/data/tree_run.aspx -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项<em>时</em>在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定<em>时</em>器<em>控件</em>Timer,用来定<em>时</em>发起AJAX请求。 +2009-09-06 v2.1.0 -Button的Pressed属性<em>值</em>能够正确的反映客户端的变化。 -优化Tree<em>控件</em>的AJAX实现。 +为页面的Form添加autocomplete="off"属性。 -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 +添加对extjs3.0中所有语言的支持。 -ExtAspNet扩展的多语言包在js\languages\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现 -你可以向其中添加自己的语言版本,并执行js\languages下的pack.bat打包,最后编译工程。 +2009-09-01 v2.0.9 -为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 +在aspx页面中必须显示的声明<em>控件</em>的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 -这将会影响所有的aspx页面,所以要特别关注。 -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). +所有的面板默认有两个集合属性(Toolbars和Items). -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此<em>时</em>Items是只读的). -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 -祝你生日快乐 - 小师妹妹。 +2009-08-29 v2.0.8 -ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 -将所有的示例转化为英语版本。 -修正Tree<em>控件</em>的一个BUG(定义Mappings属性<em>时</em>)。 +PageManager.Instance应该存在于HttpCon<em>text</em>.Current,而不是一个全局变量。 -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。 +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。 +2009-08-25 v2.0.7 -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由<em>改变</em>Grid中每个单元格的<em>值</em>了。 -增加示例-如何将Grid<em>控件</em>导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 +去除PageLayout<em>控件</em>,此<em>控件</em>可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 +2009-08-14 v2.0.6 -<em>动态</em><em>生成</em>菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(feedback:shguo)。 -优化AJAX的内部实现,每个页面保存的ViewState现在减少1/3左右(重要更新)。 -优化Tree节点的NodeId自动<em>生成</em>,减少ViewState占用。 +2009-08-09 v2.0 beta5 +ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。 -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior="false" --也就是说<em>生成</em>的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 --我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net<em>控件</em>了。 -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net<em>控件</em>会在回发<em>时</em>保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的<em>控件</em>。 -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 -FCKEditor和上传<em>控件</em>兼容。示例在aspnet\fileupload_run.aspx。 -修正Toolbar<em>Text</em>的文本在AJAX下更新的BUG。 -Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。 -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 +2009-08-02 v2.0 beta4 +和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。 -采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。 -现在支持Response.Redirect,你可以<em>选择</em>Response.Redirect或者ExtAspNet.PageCon<em>text</em>.Redirect重定向页面,两者效果一样。 -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 -Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。 -修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。 -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 -增加Menu和Accordion的示例。 -修正Window<em>控件</em>的IconUrl有<em>时</em>不显示(Target="_parent")的BUG[feedback:xmq&mgzhenhong]。 +2009-07-22 v2.0 beta3 -兼容FCKEditor。 -在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。 +2009-07-13 v2.0 beta2 -集成extjs最新版本v3.0。 +兼容IE6.0-7.0-8.0。 -这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 -目前先禁用IE6.0-7.0的QuickTips。 -优化底层JavaScript。 +2009-07-05 v2.0 beta1 -更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。 -使用YUI Compressor压缩JavaScript和CSS文件。 -Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。 -ExtAspNet自身的CSS会紧挨着页面标签引入,这样在中自定义的样式可以覆盖ExtAspNet缺省样式。 +Alert对话框会遮挡所有的Window窗口。 -使用一个变通的方法解决,因为无法<em>改变</em>Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 -更新示例工程。 +2009-03-25 v1.3.1 -Tree在AJAX回发展开节点<em>时</em>JS错误[feedback:xlli]。[fixed] -Window中的EnableIFrame==false,则点击关闭按钮<em>时</em>报JS错误。[fixed] -页面包含FileUpload<em>控件</em>,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx)[fixed] -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。[fixed] +2009-03-03 v1.3.0 -如果弹出的窗口(Ext-Window)含有ASP.NET<em>控件</em>FileUpload,则此弹出窗口在关闭<em>时</em>出现JS错误(http://extjs.com/forum/showthread.php?t=8129)[feedback:xlli]。[fixed] -如果页面中存在ASP.NET<em>控件</em>(<em>Text</em>Box),则第二次提交表单就会报错(视图状态不对,其实<em>时</em>没有更新EventValidation隐藏字段导致的问题)。[fixed] -页面上放置ExtAspNet-Button和ASP.NET-Button,则点击ExtAspNet-Button<em>时</em>激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。[fixed] -ExtAspNet内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。[added] +如果以前你听过不要在ExtAspNet工程中使用ASP.NET标准<em>控件</em>的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet<em>控件</em>和ASP.NET标准<em>控件</em>和平共处了。[fixed] -如果一个ASP.NET按钮<em>控件</em>要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 -如果要在一次ExtAspNet的原生AJAX回发<em>时</em>更新ASP.NET<em>控件</em>的<em>值</em>,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 +2009-02-27 v1.2 beta9 -网络连接出错<em>时</em>的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed] -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed] +系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed] -底层使用Javascript创建一个Window<em>控件</em>的代码由原来的2000字符减少为500个字符。 -PageCon<em>text</em>静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。 ---[updated]删除PageCon<em>text</em>中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串 -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageCon<em>text</em>.GetFormModifiedConfirmReference获取此方法的客户端脚本。 ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误! -A页面有Ext-Window<em>控件</em>弹出B页面,B页面有Ext-Window<em>控件</em>弹出C页面,B页面的Ext-Window<em>控件</em>设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 ---当<em>时</em>如果用户直接访问B页面,就会报JS错误,因为此<em>时</em>找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 -Window<em>控件</em>的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单<em>改变</em>,然后关闭弹出窗口的客户端脚本”。 ---为Window<em>控件</em>增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单<em>改变</em>,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 ---Window<em>控件</em>的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。 ---现在可以很方便的为Window<em>控件</em>的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 -如果弹出窗口(Window<em>控件</em>)中IFrame的页面不能正常加载(网络暂<em>时</em>出错或页面抛出异常),则此<em>时</em>点击右上角的关闭按钮会报JS错误,因为此<em>时</em>页面尚未加载完毕。 ---此版本修正了这个BUG,即<em>时</em>页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 -Window<em>控件</em>的IFrameName属性是自动<em>生成</em>的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 -CurrentActiveWindow改名为ActiveWindow。 -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values) ---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。 +2009-02-23 v1.2 beta8 -ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed] -<em>DropDown</em><em>List</em>在Ajax回发<em>时</em>不能计算模拟树的数据[feedback:huihuang]。[fixed] -<em>DropDown</em><em>List</em>在页面第一次加载<em>时</em>没有不可<em>选择</em>项,则回发<em>时</em>也不会有不可<em>选择</em>项的BUG。[fixed] -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed] -页面加载过程中的<em>时</em>间信息保存在Javascript变量window.box.timeInfo中。[added] +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed] +2008-10-28 v1.2 beta7 -<em>DropDown</em><em>List</em>没有选中任何一项,回发<em>时</em>报错[feedback:huihuang]。[fixed] -Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed] +PageCon<em>text</em>优化。[fixed] -去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 -去除RegisterStartupScript的重载函数,只保留最简单的PageCon<em>text</em>.RegisterStartupScript(string script)函数。 -Resirect增加重载函数Redirect(string url, string target),其中target可能的取<em>值</em>为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。 -Image<em>控件</em>增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[feedback:jqpeng]。[fixed] -发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。[fixed] -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed] -Row和Column布局<em>时</em>,修正IE下设置RowHeight="100%"<em>时</em>显示不正确的BUG。[fixed] -AccordionLink当鼠标移上和移开<em>时</em>,有背景色的变化效果[feedback:huihuang]。[fixed] +TabStrip的Tab<em>控件</em>的EnablePostBack属性会在回发<em>时</em>保持(也即是说如果EnablePostBack=true,回发<em>时</em>没<em>改变</em>EnablePostBack的<em>值</em>,则每次切换到此Tab都会回发)。[fixed] -有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 +2008-10-20 v1.2 beta6 +使用<em>控件</em>的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed] -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 +<em>DropDown</em><em>List</em>优化。[fixed] -去除EnableFirstItem/FirstItem<em>Text</em>/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 现在可以方便的在后台<em>DropDown</em><em>List</em>1.Items.Insert(0, new ExtAspNet.<em>List</em>Item("全部", "-1"));来达到同样的效果。 +如果某项(<em>List</em>Item)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。 -和Asp.net中的保持一致,<em>List</em>Item的Value<em>值</em>可以为空字符串。 也就是可以这样写<em>DropDown</em><em>List</em>1.SelectedValue = ""; -<em>List</em>ItemCollection增加重载函数Add(string <em>text</em>, string value),这样方便后台添加列表项。 -处于布局内的容器<em>控件</em>(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed] -注意,<em>控件</em>的高度指的是整个<em>控件</em>的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。[fixed] +为所有<em>控件</em>属性增加在VS中的智能提示。[fixed] -需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll<em>时</em>xml会被拷贝到bin目录下,提供VS的智能提示。 +<em>控件</em>的属性如果是枚举类型,如果此属性可以不取<em>值</em>,则默认为None。[fixed] -TriggerIconType.Default -> TriggerIconType.None -SystemIconType.Empty -> SystemIconType.None -RegexPattern.USER_DEFINED -> RegexPattern.None -表单验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。[fixed] +注意:一个属性可以拥有多个<em>值</em>的情况。[fixed] -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 +AccordionLink实现为<em>控件</em>。[fixed] -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[feedback:jima]。 +确认:可以方便的<em>动态</em>添加<em>控件</em>,并且可以给<em>控件</em>添加服务器端事件(示例在form/form_dynamic_run.aspx)。[fixed] +2008-10-15 v1.2 beta5 -验证表单字段的ValueToCompare属性,为字符串<em>时</em>会出错的BUG。[fixed] +优化下拉列表。[fixed] -验证下拉列表<em>时</em>,应该取<em>List</em>Item的Value属性进行验证,而不是<em>Text</em>属性。 -<em>DropDown</em><em>List</em>的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 -<em>DropDown</em><em>List</em>不支持Empty<em>Text</em>属性。 -<em>List</em>Item启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可<em>选择</em>,以及创建模拟下拉树。 -<em>DropDown</em><em>List</em>增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 +2008-09-27 v1.2 beta4 +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会<em>改变</em>Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。[fixed] -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed] +AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。[fixed] -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上标签。 -适当增大AccordionPanel中链接的高度20px->22px,同<em>时</em>对链接的样式也做了微调。 -通过BodyPadding控制链接列表的边距。 -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台<em>动态</em>添加链接,效果很赞,此需求由马季提出。 +2008-09-25 v1.2 beta3 +代码优化与设计<em>时</em>支持(尚需要不断完善,目前可以在ASPX页切换到“设计<em>时</em>”,方便属性的更改和事件处理函数的添加)。[fixed] -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading -TabStrip/Toolbar -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed] -向Form中<em>动态</em>添加<em>控件</em>的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。[fixed] +大部分容器的子<em>控件</em>集合更正为Items(以前有些是Rows)。[fixed] -影响的<em>控件</em>包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 -保留TabStrip的Tabs(TabCollection)属性。 -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 -预祝今晚神七发射成功。 +2008-09-22 v1.2 beta2 +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed] -表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项<em>时</em>数组越界。所有使用box<em>控件</em>的应用程序都受到此BUG的影响,需尽快更新到新版本。 +代码优化与设计<em>时</em>支持(示例中表单<em>控件</em>都已支持设计)。[fixed] -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/<em>Text</em>Box -TriggerBox/TwinTriggerBox/Window/<em>Text</em>Area/HtmlEditor/DatePicker/NumberBox -CheckBox/RadioButton/RadioButton<em>List</em>/<em>DropDown</em><em>List</em> -Grid +2008-09-19 v1.2 beta1 -Image/LinkButton/HyperLink增加一些Ajax可更新属性。[fixed] +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。[fixed] -修正Form/SimpleForm中隐藏一个表单字段(Hidden=false)会占据页面空间的BUG。 -Toolbar<em>Text</em>/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed] -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果)[fixed] +2008-09-09 v1.1 +Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在<em>控件</em>中。[fixed] -网报:CssClass="toolbar-pagemenu" CssStyle="border:0px;",同<em>时</em>定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。[fixed] -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。[fixed] +布局整理。[fixed] -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 -其中一些<em>控件</em>默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局<em>控件</em>默认的布局是Container。 -经常用到的布局<em>控件</em>:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor +2008-09-08 v1.1 beta7 -MenuButton/MenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [feedback:huayu]。[fixed] -MenuButton/MenuHyperLink/MenuSeparator/Menu<em>Text</em>增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax<em>时</em>显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed] +大部分的ExtAspNet<em>控件</em>增加Hidden属性(少数几个<em>控件</em>没有此属性:Menu),这样在Ajax<em>时</em>可以显示隐藏<em>控件</em>。[fixed] -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的<em>控件</em>渲染到客户端但是隐藏。 -US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。 -网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。 +2008-09-04 v1.1 beta6 -PageCon<em>text</em>.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed] +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed] -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多<em>控件</em>(Grid,<em>DropDown</em><em>List</em>,TabStrip)。 -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 -<em>DropDown</em><em>List</em>在Ajax<em>时</em>应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed] -Button/MenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed] -Tree的Ajax支持(尚需优化)。[fixed] +2008-09-02 v1.1 beta5 -<em>DropDown</em><em>List</em>如果第一次没有绑定<em>值</em>,应该绑定到[[]](二维数组),而不是[](一维数组)。[fixed] -模拟树的<em>DropDown</em><em>List</em>,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载<em>时</em>,即使没有数据也需要设置Data<em>Text</em>Field/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的<em>值</em>,否则Ajax回发<em>时</em>会出错)。[fixed] -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector<em>控件</em>(以后不会用AspnetAjax,这个<em>控件</em>已经完成使命)。[fixed] -不要使用Asp.net的<em>控件</em>HiddenField,而是使用ExtAspNet的HiddenField,因为Asp.net的<em>控件</em>在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed] -网报Ajax整合基本完成(除了待审批->下一步[审核/归档/出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed] -IE下,RadioButton<em>List</em>中项如果存在汉字,则会换行的BUG。[fixed] -增加两个Theme[Slate/Black](样式尚需完善)。[fixed] +2008-09-01 v1.1 beta4 -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed] -RadioButton<em>List</em>去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父<em>控件</em>(SimpleForm/Form)的背景色一致。[fixed] -TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed] -Web.config中增加配置项FormLabelWidth="80"(默认为80),同<em>时</em>PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的表单字段标题的宽度。[fixed] +完善Ajax。[fixed] -RadioButton<em>List</em>增加Ajax可更新属性SelectedIndex(SelectedValue/<em>SelectedItem</em>)。 -<em>DropDown</em><em>List</em>增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/<em>SelectedItem</em>)/DataSource。 -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发<em>时</em>隐藏显示了一些,也能正确的Ajax)。 -Toolbar<em>Text</em>增加Ajax可更新属性<em>Text</em>。 +2008-08-31 v1.1 beta3 -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed] -重定向页面,使用系统的方法 PageCon<em>text</em>.Redirect(string url),使用Response.Redirect方法会出错。[fixed] +安全的Ajax设计。[fixed] -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同<em>时</em>在速度上会有进一步的提升。 -基本思想:安全的Ajax交互,明确Ajax回发<em>时</em>支持<em>控件</em>哪些属性的<em>改变</em>,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供<em>控件</em>级别的EnableAjax属性。 -整理支持Ajax的<em>控件</em>属性<em>改变</em>列表(所有被支持的属性<em>改变</em>都是安全的、快速的,所有不被支持的属性<em>改变</em>不会对UI起作用,同<em>时</em>是安全的,不会有js错误)。 -网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed] +2008-08-29 v1.1 beta1 +Window<em>控件</em>是否弹出的状态在回发<em>时</em>维持。[fixed] -<em>控件</em>设计的一个原则,凡是可以在客户端<em>改变</em>的属性都应该在回发<em>时</em>保持属性的状态。 +完全抛弃Asp.NetAjax,ExtAspNet<em>控件</em>内置Ajax支持。[fixed] -这是一个<em>值</em>得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。 -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 +在这种设计下,其实可以完全抛弃Javascript。 -比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 -推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。 +目前ExtAspNetAjax的限制。 -只对ExtAspNet<em>控件</em>起作用,对Asp.net<em>控件</em>不起作用。 -对容器<em>控件</em>(有子<em>控件</em>的<em>控件</em>)不起作用,只对最底层的<em>控件</em>起作用。 -对<em>改变</em><em>控件</em>的Visible属性会有错误。 -Window<em>控件</em>的属性<em>改变</em>只有少数几个起作用(Popup,IFrameUrl)。 -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading<em>控件</em>。[fixed] -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed] -Grid选中行的状态在第一次回发<em>时</em>不能保持的BUG。[fixed] +2008-08-26 v1.0 +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 -主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能<em>时</em>要禁用此插件。 +优化弹出窗口中IFrame的显示速度。[fixed] -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建<em>时</em>间。 -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor="#CADDF7",以便分隔符的颜色和Toolbar的颜色一致)[fixed] +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed] -一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的<em>值</em>)(示例在default.aspx)。 -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed] +TabStrip中非当前Tab会延迟渲染。[fixed] -这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染<em>时</em>间。 -由于非当前Tab不会在页面加载<em>时</em>渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到<em>控件</em>的render事件中。 -不能比较两个DataPicker大小的BUG。[fixed] -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed] -全新的ExtAspNet.Examples(基础知识/表单<em>控件</em>/数据绑定/容器布局/IFrame框架)。[fixed] +2008-08-19 v0.4 beta6 +PageManager增加两个属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。[fixed] -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 -RadioButton<em>List</em>放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed] +extjs的BUG,当页面中含有iframe<em>时</em>,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.php?t=43246)(示例在test.aspx)[fixed] -现在的解决方法是在初始化<em>时</em>:if(this.initialized){return;}this.initialized=true; +需要先回发页面再弹出IFrame窗口。[fixed] -在回发<em>时</em>设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口<em>时</em>要注意设置Popup=false。 -另一种做法(推荐):PageCon<em>text</em>.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 +2008-08-15 v0.4 beta5 -点击关闭窗口的按钮,在IE6下会有JS错误。[fixed] -增加BorderLayout<em>控件</em>,示例在iframe/borderlayout.aspx。[fixed] +Radiobutton<em>list</em>显示有重影(示例在radio.aspx)。[fixed] -全新的样式。 -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 -GetValueReference取得的<em>值</em>不正确的BUG。 -<em>动态</em>向Form中添加FormRow,并<em>动态</em>的向FormRow中添加表单字段,以及如何取得表单字段的<em>值</em>。(示例在form_dynamic.aspx)[fixed] +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed] -这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本<em>改变</em>的IFrameUrl会在回发<em>时</em>保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的<em>改变</em>,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) +2008-08-13 v0.4 beta4 -点击关闭窗口的按钮,在IE下会有JS错误。[fixed] -Window的右上角关闭图标增加提示,优化事件响应。[fixed] -Window的代码重构。[fixed] +修正一个的内存泄漏。[fixed] -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 -内存存在泄漏<em>时</em>,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 -IE窗口最小化<em>时</em>,IE会自动进行垃圾回收。 +2008-08-12 v0.4 beta3 -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed] -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。[fixed] +页面正在加载的提示尽早的显示出来。[fixed] -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 +2008-08-08 v0.4 beta2 -TabStrip延<em>时</em>加载出错。[fixed] -Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_ExtAspNet/FE_ApplyEditor.aspx。[fixed] -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。[fixed] -实现网报首页下拉菜单和左侧菜单的导航功能。[fixed] -Window的创建在页面显示后进行,不计算在js渲染<em>时</em>间内。[fixed] -优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed] -button_iframe.aspx默认会加载form.aspx页面(Window<em>控件</em>的BUG)。[fixed] -Window中的保存并关闭按钮和Asp.netAjax冲突。[fixed] -优化关闭Window的js脚本,减少写到页面的js大小。[fixed] -加快“保存并关闭”按钮关闭窗口的速度,使用PageCon<em>text</em>.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed] +2008-08-05 v0.4 beta1 -<em>DropDown</em><em>List</em>去除Traditional属性,和传统的Asp.net<em>控件</em>一样不可编辑。[fixed] -<em>DropDown</em><em>List</em>增加Selected<em>Text</em>属性(去除了模拟树<em>时</em>通过<em>SelectedItem</em>.<em>Text</em>的多余html字符)。[fixed] -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed] -将<em>生成</em>的js对象的名称简单化,这样可以减少<em>生成</em>的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。[fixed] +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed] -因为在页面的Page_Load中,if (!IsPostBack){PageCon<em>text</em>.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发<em>时</em>没有注册到页面,因为js调用此脚本<em>时</em>报错。 -一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。 -另一种办法就是在PageManager<em>控件</em>中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容<em>改变</em>的脚本)的属性(会在每次页面回发(包含ajax回发)<em>时</em>注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 +PageManager<em>控件</em>增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed] -这个手工添加onReady函数能够在每次页面回发<em>时</em>都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。 -每个页面必须添加一个PageManager<em>控件</em>,否则会出错,同<em>时</em>去除DesignTimeStyle<em>控件</em>(作为PageManager的属性出现)。[fixed] -<em>Text</em>Field等表单字段增加Readonly属性。[fixed] +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。[fixed] -最大的好处是可以减少页面下载完毕后Javascript渲染<em>时</em>间(可以节约一般的渲染<em>时</em>间)。(所有示例在iframe文件夹下) +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window<em>控件</em>增加一个属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 -显然,<em>控件</em>本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口<em>时</em>,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B<em>时</em>,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 -示例4,弹出窗口中的弹出窗口。 -对整个Examples更新测试。[fixed] +2008-07-31 v0.3 beta12 -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed] -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同<em>时</em>第二次打开Window中的IFrame不会有残影出现。[fixed] -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed] -Tree<em>控件</em>,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed] +规范关闭窗口<em>时</em>提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。[fixed] -内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageCon<em>text</em>.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。 -参照Yslow的评分规则,将JS文件引用由head移动到body中。[fixed] -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed] +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx)[fixed] -增加PageManager<em>控件</em>(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 +2008-07-24 v0.3 beta11 -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同<em>时</em>每个表单字段都增加OffsetRight属性 [feedback:jima]。[fixed] -Window在回发<em>时</em>设置的Title不起作用的BUG。[fixed] -增加Image<em>控件</em> [feedback:jima]。[fixed] -Tree<em>控件</em>,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed] -Image增加ToolTipTitle/ToolTipAutoHide两个属性,当提示信息特别长<em>时</em>,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed] -去掉<em>DropDown</em><em>List</em><em>控件</em>的<em>Text</em>属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed] -过滤提示消息中的换行符(转换为),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed] +2008-07-23 v0.3 beta10 +完善Tree<em>控件</em>。[fixed] -如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。 -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 -更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。 -Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码![fixed] -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。[fixed] +2008-07-22 v0.3 beta9 +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed] -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed] -虽然最后未能解决##差旅交通费在IE和Firefox下显示的不同效果。 -但是通过用来代替,从而实现FF和IE下样式的统一。 -刚看到old9的解决方案:把“差旅交通费”改成“差旅交通费”,在IE下和FF下的都不换行,:-) -LinkButton增加OnClick事件 [feedback:huihuang]。[fixed] -Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed] +增加树<em>控件</em>(Tree)(示例在tree2.aspx)。[fixed] -可以在回发<em>时</em>维持树的状态(选中行,折叠/展开,CheckBox)。 -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 +2008-07-16 v0.3 beta8 +ContentPanel中放置ExtAspNet<em>控件</em>,则渲染<em>时</em>会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed] -隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet<em>控件</em>,如果容器的display='none',则会出现各种问题(主要是大小不对)。 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。 +IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。[fixed] -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 -最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();): 示例在 Site.Master 页面。 +集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当<em>改变</em>窗口大小<em>时</em>你会惊讶的发现内容区域的内容全部为空了![fixed] -解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), 这样的代码让我想起刷新窗口<em>时</em>那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 +2008-07-14 v0.3 beta6 -增加FlashObject<em>控件</em>。[fixed] -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed] -Accordion选中样式微调。[fixed] -预加载Form表单出错<em>时</em>提示信息的背景图片。[fixed] +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed] -因为延迟加载数据不会<em>改变</em>Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 -<em>改变</em>Grid中静态的CheckBoxField图片。[fixed] -TabStrip增加TabIndexChanged事件,同<em>时</em>Tab增加EnablePostBack,可以在点击一个Tab<em>时</em>引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed] +2008-07-12 v0.3 beta5 -页面菜单Toolbar的分割符和背景不相融合。[fixed] -表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同<em>时</em>增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed] -如果是同种类型的表单字段,不需要指定CompareType,比如两个NumberBox比较<em>值</em>的大小不需要指定CompareType,而一个NumberBox和<em>Text</em>Box比较大小需要指定CompareType。 +如果在编辑页面使用AspNetAjax,则不能在回发<em>时</em>关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。[fixed] -这是由于ajax后执行的javascript中不能有return false语句。 +在文本框失去焦点<em>时</em>,执行一些Javascript脚本(示例在<em>text</em>box_blur.aspx) [feedback:xmzhu]。[fixed] -在页面添加onReady函数(会被系统调用),然后用javascript监视文本框<em>值</em>的<em>改变</em>。 -弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window<em>控件</em>的IFrameUrl指向这个页面而不是"#"。[fixed] +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮<em>时</em>会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed] -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed] +增加Menu、Menu<em>Text</em>、MenuSeparator、MenuButton、MenuHyperLink<em>控件</em>,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed] -增加SplitButton<em>控件</em>。[fixed] +2008-07-09 v0.3 beta4 -DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed] +Form表单字段(<em>Text</em>Box,<em>DropDown</em><em>List</em>...)之间可以比较大小 [feedback:huihuang]。[fixed] -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed] -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活<em>时</em>才设置Url。 -RadioButton<em>List</em>增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed] -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed] +表单字段Enable=false<em>时</em>显示颜色太浅 [feedback:jima]。[fixed] -覆盖缺省样式的.x-item-disabled,设置不透明。 +2008-07-08 v0.3 beta3 -Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed] +增加HiddenField<em>控件</em>。[fixed] -其实用<em>Text</em>Box也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 +TriggerBox 如果 Enable<em>Text</em>Box = true,则不能将<em>Text</em>回发(这是html的限制)。[fixed] -最后的解决方案居然是设置 readonly=true,同<em>时</em>更改属性为 Readonly(示例在<em>text</em>box2.aspx)。 -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed] +控制下拉列表某些项不可以<em>选择</em>(示例在<em>dropdown</em><em>list</em>2.aspx)。[fixed] -增加 DataEnableSelectField 属性,不可<em>选择</em>的项变灰,并且鼠标经过<em>时</em>没有样式。 -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed] +2008-07-07 v0.3 beta2 +增加UpdatePanelConnector<em>控件</em>,支持在布局构建的页面使用Asp.net Ajax。[fixed] -使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。 -示例在ajax3.aspx/content_page4.aspx。 -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 +2008-07-03 v0.3 beta1 +容器<em>控件</em>的AutoHeight/AutoWidth默认为false。[fixed] -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 +增加UserControlConnector,可以在其中放置用户<em>控件</em>(示例在page_usercontrol.aspx)。[fixed] -也可以在ContentPanel中放置用户<em>控件</em>,注意两者的区别。 +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed] +支持Asp.net ajax异步加载。[fixed] -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 -对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。 +2008-07-02 v0.2 beta12 +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx)[fixed] -支持Iframe内按钮和window右上角关闭按钮。 -删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed] -在Firefox下还有问题。[fix pending] +排序<em>时</em>在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed] -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。[fixed] -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed] -可以在ContentPanel中放置用户<em>控件</em>(示例在page_usercontrol.aspx)。[fixed] +2008-06-30 v0.2 beta11 -增加TwinTriggerBox<em>控件</em>(示例在twintriggerbox.aspx)。[fixed] -Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录<em>时</em>总记录数不会变化 [feedback:zgjiang2]。[fixed] -关闭Window<em>时</em>PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed] -如果表单验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。[fixed] +页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx)[fixed] -目前还不支持Window右上角关闭按钮的提示保存功能。 -Master/Content的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed] -Grid中的LinkButtonField设置Confirm<em>Text</em>会出错 [feedback:huihuang]。[fixed] -增加静态类Confirm。[fixed] +2008-06-27 v0.2 beta10 +Grid完善。[fixed] -CheckBoxField在回发<em>时</em>不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示<em>时</em>的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 -切换分页<em>时</em>清空选中的<em>值</em> [feedback:jqpeng]。 -增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。 -<em>DropDown</em><em>List</em>模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在<em>dropdown</em><em>list</em>_simulate_tree.aspx)。 +2008-06-25 v0.2 beta9 +Window窗体中的</a></div><div data-report-view="{"mod":"popu_645","index":"5","dest":"https://download.csdn.net/download/tianzhu131/1785804","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1713982881219_78446\"}","spm":"1035.2023.3001.6557"}" class="list-item" data-v-ca2d15ac><div class="recommend-title" data-v-ca2d15ac><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAltJREFUWEdjZGBgYGhv/yD45//nEEYGBrX//xj4QWK0AoxMDB//MzDcYmHkXVNZKfCeEWz5v8/1DP8ZuGhlKVZzGRm+sTDxNjI2tz1OZfjHYEpXy2GWMTGcZmxpe9xN62DH5TlQdDA2tzyeNSC+h1o66gCyQyApUdRNSIhNGBSS7979ejtv/utd5EQl2Q7IypT0ExJiFoc44O/LadOfbxp1wPAOAWlpdr5Pn//8/Pzp70+QT3GlAX5+ZnYeHhb2p09/fiImRIhOhBYWvIo21ryWu/Z8PHDp4tdn2BxgoM8l4+IiYH/k6OdjJ058vk91B7g487swMDD8v3Hj+2VJSTYpfn5mEZAlHz/9ffPq5e+Xqqoc2iD+nr0f99DSAQQ9RhMHcHAwsYSGCtvKy7Gr4HPBo0c/b69c/fbwzx///hJ0KQMDA9FpAGaYizO/tpkZjwUTEyMTsgX//v3/d/LUl+N79368RozFMDUkOwCkUUODU8zHW9CFg4OJG8T/8ePf181b3u25efPHK1IsB6nF6gAjY25ZEWFWcNPs169/fw4c+HQD3WBBIRaOsBAhZ5D4qjXv9r5/9+cHuhoHBz4NNjYmFpD4m7e/P547+/UxuhqsDoiPE3WWlWVXgvju/5ee3qfLsfmMiZmBEST+7y/Df2zyJcXSkRwcjDwgucePf95buOj1Xqo6gFBwDw8H/P/P8O/nz//fCPkWmzw7OyMXIyMDOLeQHQXkWIxNz9BygJubgI6kBCu4tUMt8PzF75e7dn24QlQuoJalxJgzCDomA901G/DOKSieBrJ7DgCPdYFAskV/NwAAAABJRU5ErkJggg==" alt data-v-ca2d15ac> <a target="_blank" href="https://download.csdn.net/download/tianzhu131/1785804" data-report-click="{"mod":"popu_645","index":"5","dest":"https://download.csdn.net/download/tianzhu131/1785804","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1713982881219_78446\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default" class="title" data-v-ca2d15ac>API精灵源码(C#编)</a></div> <a target="_blank" href="https://download.csdn.net/download/tianzhu131/1785804" data-report-click="{"mod":"popu_645","index":"5","dest":"https://download.csdn.net/download/tianzhu131/1785804","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1713982881219_78446\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default" class="desc" data-v-ca2d15ac>/* API精灵 FOR C# 开始设计日期 2004.03.06 设计目的:简单快速对C#中使用的API函数进行查询,并给出调用代码 设计进度: 2004.03.09 完成对的查询功能,包括 代码调用,中文注释,所需的DLL库,与C#中函数对应关系 2004.03.10 0:48:52 完成了用StringBuilder数组对原ComboBox的替换,可以使程序不用从新读取数据库就可以刷新修改后的信息! 2004.03.10 18:00:00 完成了用Array<em>List</em>对StringBuilder数组的替换节省2M内存 2004.03.11 21:10:15 完成滚动字幕的设置,启用了一个TIMER<em>控件</em>,然后设置<em>时</em>间,删除字符串的第一个字母已达到滚动效果! 2004.03.11 22:02:00 改正更新<em>时</em>出现空<em>值</em>出错问题,新填函数isnull 2004.03.12 13:22:08 完成关键字高亮显示 高亮显示函数 mykeywords 2004.03.12 22:08:20 加强了高亮显示函数 mykeywords的功能,使其能识别不同的关键字并显示不同的颜色 2004.03.14 01:40:00 完成对CONST的查询,并且增加了 mykeywords1函数,使其关键字显示性能提高 2004.03.14 13:12:00 添加了提示信息,提示信息设置在函数 mytips() 中 2004.03.15 21:51:20 更改数据库和WINAPI.TXT路径为程序运行路径 2004.03.15 22:31:50 添加了鼠标右键信息 2004.03.15 23.23:30 添加了数据库密码 2004.03.16 23:24:30 添加了版权信息以及相应提示 */ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Data.OleDb; using System.Runtime.InteropServices; using System.IO; namespace API精灵 { /// /// Form1 的摘要说明。 /// 这个版本没有使用oleDbDataAdapter+DataSet对数据进行存取,而是使用的OleDbCommand +OleDbDataReader 的形式。 /// 主要是想试验一下不用oleDbDataAdapter+DataSet的数据存取速度。 /// public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.GroupBox groupBox3; private System.Windows.Forms.Button button4; private System.Windows.Forms.<em>Text</em>Box mysearch; private System.Windows.Forms.<em>List</em>Box tip<em>list</em>; private System.Windows.Forms.ComboBox select_type; private System.Windows.Forms.<em>Text</em>Box dll<em>text</em>; /// /// 必需的设计器变量。 /// //自定义变量 private Array<em>List</em> fundll = new Array<em>List</em>();//保存读取出来的DLL内容 private Array<em>List</em> funtips = new Array<em>List</em>();//保存读取出来的中文提示信息 private Array<em>List</em> funcode = new Array<em>List</em>();//保存读取出来的C#调用代码 private Array<em>List</em> funmat = new Array<em>List</em>();//保存读取出来的C#对应函数 private Array<em>List</em> funwin9x = new Array<em>List</em>();//保存读取出来的WIN9X private Array<em>List</em> funwin2k = new Array<em>List</em>();//保存读取出来的WIN2K private int nowselect = 0; private string oldscoll_<em>text</em>; private int nowtypeselect = 0; private string nowpath = @System.Environment.CurrentDirectory+@"\"; private string dbpassword = "ling_feng_work"; public string myConnstr; public OleDbConnection myconn ;//创建一个新连接 private string mysql ;//查询语句 private string sql_update; private System.Windows.Forms.Rich<em>Text</em>Box tipsmemo; private System.Windows.Forms.<em>Text</em>Box mat_<em>text</em>; private OleDbCommand mycommand = new OleDbCommand(); private System.Windows.Forms.Rich<em>Text</em>Box codememo; private System.Windows.Forms.GroupBox groupBox4; private System.Windows.Forms.CheckBox win9x; private System.Windows.Forms.GroupBox groupBox5; private System.Windows.Forms.CheckBox win2k; private System.Windows.Forms.CheckBox e_add; private System.Windows.Forms.CheckBox e_modify; private System.Windows.Forms.Button b_modify; private System.Windows.Forms.Button b_add; private System.Windows.Forms.Timer timer1; private System.Windows.Forms.ToolTip toolTip1; private System.Windows.Forms.Con<em>text</em>Menu mypop; private System.Windows.Forms.MenuItem menuItem1; private System.ComponentModel.IContainer components; public Form1() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /// /// 清理所有正在使用的资源。 /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows 窗体设计器<em>生成</em>的代码 /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1)); this.button1 = new System.Windows.Forms.Button(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.tip<em>list</em> = new System.Windows.Forms.<em>List</em>Box(); this.select_type = new System.Windows.Forms.ComboBox(); this.mat_<em>text</em> = new System.Windows.Forms.<em>Text</em>Box(); this.mysearch = new System.Windows.Forms.<em>Text</em>Box(); this.dll<em>text</em> = new System.Windows.Forms.<em>Text</em>Box(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.tipsmemo = new System.Windows.Forms.Rich<em>Text</em>Box(); this.mypop = new System.Windows.Forms.Con<em>text</em>Menu(); this.menuItem1 = new System.Windows.Forms.MenuItem(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.codememo = new System.Windows.Forms.Rich<em>Text</em>Box(); this.b_modify = new System.Windows.Forms.Button(); this.b_add = new System.Windows.Forms.Button(); this.button4 = new System.Windows.Forms.Button(); this.groupBox4 = new System.Windows.Forms.GroupBox(); this.win2k = new System.Windows.Forms.CheckBox(); this.win9x = new System.Windows.Forms.CheckBox(); this.groupBox5 = new System.Windows.Forms.GroupBox(); this.e_add = new System.Windows.Forms.CheckBox(); this.e_modify = new System.Windows.Forms.CheckBox(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); this.groupBox4.SuspendLayout(); this.groupBox5.SuspendLayout(); this.SuspendLayout(); // // button1 // this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.button1.Location = new System.Drawing.Point(224, 395); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 24); this.button1.TabIndex = 10; this.button1.<em>Text</em> = "关 于"; this.button1.Click += new System.EventHandler(this.button1_Click); // // groupBox1 // this.groupBox1.Controls.Add(this.tip<em>list</em>); this.groupBox1.Controls.Add(this.select_type); this.groupBox1.Controls.Add(this.mat_<em>text</em>); this.groupBox1.Controls.Add(this.mysearch); this.groupBox1.Controls.Add(this.dll<em>text</em>); this.groupBox1.Location = new System.Drawing.Point(8, 8); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(200, 168); this.groupBox1.TabIndex = 1; this.groupBox1.TabStop = false; this.groupBox1.<em>Text</em> = "API查询"; // // tip<em>list</em> // this.tip<em>list</em>.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.tip<em>list</em>.ItemHeight = 12; this.tip<em>list</em>.Location = new System.Drawing.Point(8, 43); this.tip<em>list</em>.Name = "tip<em>list</em>"; this.tip<em>list</em>.Size = new System.Drawing.Size(184, 110); this.tip<em>list</em>.TabIndex = 1; this.tip<em>list</em>.Visible = false; this.tip<em>list</em>.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tip<em>list</em>_KeyDown); this.tip<em>list</em>.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tip<em>list</em>_KeyPress); this.tip<em>list</em>.DoubleClick += new System.EventHandler(this.tip<em>list</em>_DoubleClick); this.tip<em>list</em>.MouseUp += new System.Windows.Forms.MouseEventHandler(this.tip<em>list</em>_MouseUp); this.tip<em>list</em>.MouseLeave += new System.EventHandler(this.tip<em>list</em>_MouseLeave); this.tip<em>list</em>.SelectedIndexChanged += new System.EventHandler(this.tip<em>list</em>_SelectedIndexChanged); // // select_type // this.select_type.<em>DropDown</em>Style = System.Windows.Forms.ComboBoxStyle.<em>DropDown</em><em>List</em>; this.select_type.Items.AddRange(new object[] { "API函数查询", "常量定义查询"}); this.select_type.Location = new System.Drawing.Point(8, 61); this.select_type.Name = "select_type"; this.select_type.Size = new System.Drawing.Size(184, 20); this.select_type.TabIndex = 2; this.select_type.SelectedIndexChanged += new System.EventHandler(this.select_type_SelectedIndexChanged); // // mat_<em>text</em> // this.mat_<em>text</em>.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.mat_<em>text</em>.Location = new System.Drawing.Point(8, 134); this.mat_<em>text</em>.Name = "mat_<em>text</em>"; this.mat_<em>text</em>.Size = new System.Drawing.Size(184, 21); this.mat_<em>text</em>.TabIndex = 4; this.mat_<em>text</em>.<em>Text</em> = "C#对应函数:"; this.mat_<em>text</em>.MouseDown += new System.Windows.Forms.MouseEventHandler(this.mat_<em>text</em>_MouseDown); // // mysearch // this.mysearch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.mysearch.Location = new System.Drawing.Point(8, 24); this.mysearch.Name = "mysearch"; this.mysearch.Size = new System.Drawing.Size(184, 21); this.mysearch.TabIndex = 0; this.mysearch.<em>Text</em> = ""; this.mysearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.mysearch_KeyDown); this.mysearch.MouseDown += new System.Windows.Forms.MouseEventHandler(this.mysearch_MouseDown); this.mysearch.<em>Text</em>Changed += new System.EventHandler(this.mysearch_<em>Text</em>Changed); // // dll<em>text</em> // this.dll<em>text</em>.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.dll<em>text</em>.Location = new System.Drawing.Point(8, 97); this.dll<em>text</em>.Name = "dll<em>text</em>"; this.dll<em>text</em>.Size = new System.Drawing.Size(184, 21); this.dll<em>text</em>.TabIndex = 3; this.dll<em>text</em>.<em>Text</em> = ""; this.dll<em>text</em>.<em>Text</em>Changed += new System.EventHandler(this.dll<em>text</em>_<em>Text</em>Changed); // // groupBox2 // this.groupBox2.Controls.Add(this.tipsmemo); this.groupBox2.Location = new System.Drawing.Point(216, 8); this.groupBox2.Name = "groupBox2"; this.groupBox2.Size = new System.Drawing.Size(200, 168); this.groupBox2.TabIndex = 2; this.groupBox2.TabStop = false; this.groupBox2.<em>Text</em> = "函数注释"; // // tipsmemo // this.tipsmemo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.tipsmemo.Con<em>text</em>Menu = this.mypop; this.tipsmemo.Location = new System.Drawing.Point(8, 16); this.tipsmemo.Name = "tipsmemo"; this.tipsmemo.Size = new System.Drawing.Size(184, 144); this.tipsmemo.TabIndex = 0; this.tipsmemo.<em>Text</em> = ""; this.tipsmemo.MouseEnter += new System.EventHandler(this.rich<em>Text</em>Box1_MouseEnter); // // mypop // this.mypop.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItem1}); // // menuItem1 // this.menuItem1.Index = 0; this.menuItem1.<em>Text</em> = "复制信息"; this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click); // // groupBox3 // this.groupBox3.Controls.Add(this.codememo); this.groupBox3.Location = new System.Drawing.Point(8, 221); this.groupBox3.Name = "groupBox3"; this.groupBox3.Size = new System.Drawing.Size(408, 168); this.groupBox3.TabIndex = 3; this.groupBox3.TabStop = false; this.groupBox3.<em>Text</em> = "代码调用"; // // codememo // this.codememo.Con<em>text</em>Menu = this.mypop; this.codememo.Location = new System.Drawing.Point(8, 16); this.codememo.Name = "codememo"; this.codememo.Size = new System.Drawing.Size(392, 144); this.codememo.TabIndex = 0; this.codememo.<em>Text</em> = ""; this.codememo.<em>Text</em>Changed += new System.EventHandler(this.codememo_<em>Text</em>Changed); // // b_modify // this.b_modify.Enabled = false; this.b_modify.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.b_modify.Location = new System.Drawing.Point(120, 395); this.b_modify.Name = "b_modify"; this.b_modify.Size = new System.Drawing.Size(75, 24); this.b_modify.TabIndex = 4; this.b_modify.<em>Text</em> = "修改信息"; this.b_modify.Click += new System.EventHandler(this.button2_Click); // // b_add // this.b_add.Enabled = false; this.b_add.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.b_add.Location = new System.Drawing.Point(16, 395); this.b_add.Name = "b_add"; this.b_add.Size = new System.Drawing.Size(75, 24); this.b_add.TabIndex = 5; this.b_add.<em>Text</em> = "添加新项"; // // button4 // this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.button4.Location = new System.Drawing.Point(328, 395); this.button4.Name = "button4"; this.button4.Size = new System.Drawing.Size(75, 24); this.button4.TabIndex = 6; this.button4.<em>Text</em> = "退 出"; this.button4.Click += new System.EventHandler(this.button4_Click); // // groupBox4 // this.groupBox4.Controls.Add(this.win2k); this.groupBox4.Controls.Add(this.win9x); this.groupBox4.Location = new System.Drawing.Point(8, 176); this.groupBox4.Name = "groupBox4"; this.groupBox4.Size = new System.Drawing.Size(200, 40); this.groupBox4.TabIndex = 11; this.groupBox4.TabStop = false; // // win2k // this.win2k.Location = new System.Drawing.Point(104, 11); this.win2k.Name = "win2k"; this.win2k.Size = new System.Drawing.Size(80, 24); this.win2k.TabIndex = 1; this.win2k.<em>Text</em> = "支持win2k"; // // win9x // this.win9x.Location = new System.Drawing.Point(16, 11); this.win9x.Name = "win9x"; this.win9x.TabIndex = 0; this.win9x.<em>Text</em> = "支持win9x"; // // groupBox5 // this.groupBox5.Controls.Add(this.e_add); this.groupBox5.Controls.Add(this.e_modify); this.groupBox5.Location = new System.Drawing.Point(216, 176); this.groupBox5.Name = "groupBox5"; this.groupBox5.Size = new System.Drawing.Size(200, 40); this.groupBox5.TabIndex = 12; this.groupBox5.TabStop = false; // // e_add // this.e_add.Location = new System.Drawing.Point(112, 10); this.e_add.Name = "e_add"; this.e_add.Size = new System.Drawing.Size(80, 24); this.e_add.TabIndex = 5; this.e_add.<em>Text</em> = "允许添加"; this.e_add.CheckedChanged += new System.EventHandler(this.e_add_CheckedChanged); // // e_modify // this.e_modify.Location = new System.Drawing.Point(16, 10); this.e_modify.Name = "e_modify"; this.e_modify.Size = new System.Drawing.Size(76, 24); this.e_modify.TabIndex = 4; this.e_modify.<em>Text</em> = "允许修改"; this.e_modify.CheckedChanged += new System.EventHandler(this.e_modify_CheckedChanged); // // timer1 // this.timer1.Interval = 500; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(424, 429); this.Controls.Add(this.groupBox5); this.Controls.Add(this.groupBox4); this.Controls.Add(this.button4); this.Controls.Add(this.b_add); this.Controls.Add(this.b_modify); this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox1); this.Controls.Add(this.button1); this.Controls.Add(this.groupBox2); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.<em>Text</em> = "API精灵FOR C#"; this.Load += new System.EventHandler(this.Form1_Load); this.groupBox1.ResumeLayout(false); this.groupBox2.ResumeLayout(false); this.groupBox3.ResumeLayout(false); this.groupBox4.ResumeLayout(false); this.groupBox5.ResumeLayout(false); this.ResumeLayout(false); } #endregion /// /// 应用程序的主入口点。 /// [STAThread] static void Main() { Application.Run(new Form1()); } [DllImport("user32.dll", EntryPoint="ShowWindow")] public static extern int ShowWindow ( int hwnd, int nCmdShow ); private void button1_Click(object sender, System.EventArgs e) { AboutForm myabout = new AboutForm(); myabout.ShowDialog(); } /// /// 填写mysearch中的内容。 /// private void search_comp() { if (tip<em>list</em>.SelectedIndex>-1) mysearch.<em>Text</em> = tip<em>list</em>.<em>SelectedItem</em>.ToString(); tip<em>list</em>.Visible = false ; mysearch.Select(); } /// /// 自动填写提示内容。 /// private void autocomp() { if (tip<em>list</em>.SelectedIndex>-1) try { if (this.nowtypeselect==0) //================查询函数 { this.nowselect = tip<em>list</em>.SelectedIndex; dll<em>text</em>.<em>Text</em> = fundll[tip<em>list</em>.SelectedIndex].ToString();//else tipsmemo.<em>Text</em> = funtips[tip<em>list</em>.SelectedIndex].ToString(); codememo.<em>Text</em> = funcode[tip<em>list</em>.SelectedIndex].ToString(); mat_<em>text</em>.<em>Text</em> = funmat[tip<em>list</em>.SelectedIndex].ToString(); this.oldscoll_<em>text</em> = mat_<em>text</em>.<em>Text</em>; if (funwin9x[tip<em>list</em>.SelectedIndex].ToString()==("Yes")) win9x.Checked=true; else win9x.Checked=false; if (funwin2k[tip<em>list</em>.SelectedIndex].ToString()==("Yes")) win2k.Checked=true; else win2k.Checked=false; //滚动文字 if (mat_<em>text</em>.<em>Text</em>Length>30) timer1.Enabled = true; else timer1.Enabled = false; } else { dll<em>text</em>.<em>Text</em> = ""; tipsmemo.<em>Text</em> = ""; codememo.<em>Text</em> = ""; win9x.Checked = false; win2k.Checked = false; } //******************** if (this.nowtypeselect==1) { this.nowselect = tip<em>list</em>.SelectedIndex; codememo.<em>Text</em> = funcode[tip<em>list</em>.SelectedIndex].ToString(); } //******************** //================= } catch { dll<em>text</em>.<em>Text</em> = "没有找到相应连接库"; tipsmemo.<em>Text</em> = "没有找到相应提示"; codememo.<em>Text</em> = "没有找到相应调用代码"; mat_<em>text</em>.<em>Text</em> = "没有找到相应C#函数"; } } // /// /// 手动释放一些内存。 /// private void mydisp() { tipsmemo.Clear(); codememo.Clear(); tip<em>list</em>.Items.Clear(); // ===== fundll.Clear();//保存读取出来的DLL内容 funtips.Clear();//保存读取出来的中文提示信息 funcode.Clear();//保存读取出来的C#调用代码 funmat.Clear();//保存读取出来的C#对应函数 funwin9x.Clear();//保存读取出来的WIN9X funwin2k.Clear();//保存读取出来的WIN2K } private void mysearch_<em>Text</em>Changed(object sender, System.EventArgs e) { tip<em>list</em>.Visible = true ; //自动完成功能。 tip<em>list</em>.SelectedIndex = (tip<em>list</em>.FindString(mysearch.<em>Text</em>,-1)) ;//加上这句,保证TIP<em>LIST</em>跟着自动变化 nowselect = tip<em>list</em>.SelectedIndex; autocomp(); //设置提示信息 mytips(); } private void mysearch_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if ((e.KeyCode == Keys.Down) || (e.KeyCode == Keys.Up)) tip<em>list</em>.Focus(); if (e.KeyCode == Keys.Enter) { search_comp(); if (this.nowtypeselect==0) mykeyword(); if (this.nowtypeselect==1) mykeyword1(); } if (e.KeyCode == Keys.Escape) { tip<em>list</em>.Visible = false ; } } private void tip<em>list</em>_MouseLeave(object sender, System.EventArgs e) { } private void tip<em>list</em>_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { } private void tip<em>list</em>_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { this.search_comp(); if (this.nowtypeselect==0) mykeyword(); else mykeyword1(); } if (e.KeyCode == Keys.Escape) { tip<em>list</em>.Visible = false ; } } private void tip<em>list</em>_DoubleClick(object sender, System.EventArgs e) { this.search_comp(); if (this.nowtypeselect==0) mykeyword(); else mykeyword1(); } private void Form1_Load(object sender, System.EventArgs e) { //初始化数据库 initdatabase(); //MessageBox.Show(this,"欢迎使用 共享版\n 本版对使用功能上略有限制\n 且不提供数据库更新!\n 如想<em>获得</em>更多信息请与我联系。\n dong_teng@tom.com","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); select_type.SelectedIndex = 0; AboutForm myabout = new AboutForm(); myabout.ShowDialog(); } // private void mytips() { //设置提示信息 if ((this.nowselect>-1)&(this.nowtypeselect==0)) { toolTip1.SetToolTip(this.dll<em>text</em>,"所在<em>动态</em>连接库: "+this.fundll[this.nowselect].ToString()); toolTip1.SetToolTip(this.mat_<em>text</em>,"在C#中对应的函数: "+this.funmat[this.nowselect].ToString()); toolTip1.SetToolTip(this.codememo,"函数 "+this.tip<em>list</em>.<em>SelectedItem</em>.ToString()+" 在C#中的调用代码,可以手动修改"); toolTip1.SetToolTip(this.tipsmemo,"函数 "+this.tip<em>list</em>.<em>SelectedItem</em>.ToString()+" 的注释信息,可以手动修改"); } else if ((this.nowselect>-1)&(this.nowtypeselect==1)) { toolTip1.SetToolTip(this.codememo,"常量 "+this.tip<em>list</em>.<em>SelectedItem</em>.ToString()+" 在C#中的调用代码"); toolTip1.SetToolTip(this.dll<em>text</em>,"没有相关信息"); toolTip1.SetToolTip(this.mat_<em>text</em>,"没有相关信息"); toolTip1.SetToolTip(this.tipsmemo,"没有相关信息"); } } // private void initdatabase() { string dbpath = @nowpath+"winapi.mdb"; tip<em>list</em>.Items.Clear(); //@"Provider=Microsoft.Jet.OleDB.4.0;Data Source="+dbpath+";User Id=admin;Password="+this.dbpassword ; //"Provider=Microsoft.Jet.OleDB.4.0;Data Source=your mdb filename;Jet OLEDB:Database Password='pass'" ; this.myConnstr = @"Provider=Microsoft.Jet.OleDB.4.0;Data Source="+dbpath+";User Id=admin;Jet OLEDB:Database Password="+this.dbpassword ; this.myconn= new OleDbConnection(myConnstr); mysql= @"select Fun_name,Fun_dll,Fun_tips,Fun_code,Fun_com,win9x,win2k from winapi"; using(myconn) { myconn.Open(); // if (myconn.State.ToString() == "Open") MessageBox.Show("打开成功!"); //数据处理 // OleDbCommand mycommand = new OleDbCommand(mysql,myconn); mycommand.Command<em>Text</em> = mysql; mycommand.Connection = myconn; OleDbDataReader myreader = mycommand.ExecuteReader(); int i=0; while (myreader.Read()) { tip<em>list</em>.Items.Add(myreader["Fun_name"]); fundll.Add(myreader["fun_dll"].ToString()); funtips.Add(myreader["fun_tips"].ToString()); funcode.Add(myreader["fun_code"].ToString()); funmat.Add(myreader["fun_com"].ToString()); funwin9x.Add(myreader["win9x"].ToString()); funwin2k.Add(myreader["win2k"].ToString()); i++; } myconn.Close(); myreader.Close(); } } //更新缓存 private void memo_update() { fundll[nowselect] = dll<em>text</em>.<em>Text</em>; funtips[nowselect] = this.tipsmemo.<em>Text</em>; funcode[nowselect] = this.codememo.<em>Text</em>; funmat[nowselect] = this.mat_<em>text</em>.<em>Text</em>; if (win9x.Checked) funwin9x[nowselect]="Yes" ;else funwin9x[nowselect]="No"; if (win2k.Checked) funwin2k[nowselect]="Yes" ;else funwin2k[nowselect]="No"; } // private void oleDbConnection1_InfoMessage(object sender, System.Data.OleDb.OleDbInfoMessageEventArgs e) { } //==============从WINAPI.TXT读取CONST并拆分 private void mysplip() { //string dbpath = @System.Environment.CurrentDirectory+@"\winapi.mdb"; string filename =@nowpath +"winapi.txt"; string nextline; tip<em>list</em>.Items.Clear(); StreamReader sr = new StreamReader(filename); while ((nextline = sr.ReadLine())!=null) { if (nextline.StartsWith("public const")) { string[] ss = nextline.Split('='); tip<em>list</em>.Items.Add(ss[0].Substring(16).Trim()); funcode.Add(nextline); } } sr.Close(); } //============================== private void select_type_SelectedIndexChanged(object sender, System.EventArgs e) { if (select_type.SelectedIndex != this.nowtypeselect) { this.mydisp(); switch (select_type.SelectedIndex) { case 0:initdatabase();this.nowtypeselect=select_type.SelectedIndex;break; case 1:mysplip();this.nowtypeselect=select_type.SelectedIndex;this.dll<em>text</em>.Clear();this.mat_<em>text</em>.Clear();break; } isenable(this.nowtypeselect); } } private void dll<em>text</em>_<em>Text</em>Changed(object sender, System.EventArgs e) { } private void rich<em>Text</em>Box1_MouseEnter(object sender, System.EventArgs e) { tip<em>list</em>.Visible = false ; } private void mysearch_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { tip<em>list</em>.Visible = false ; mysearch.Focus(); } private void tip<em>list</em>_SelectedIndexChanged(object sender, System.EventArgs e) { autocomp(); } /// /// 修改内容。 /// private void fun_update() { using(myconn) { myconn.ConnectionString = myConnstr; myconn.Open(); try { //if (myconn.State.ToString() == "Open") MessageBox.Show("打开成功!"); isnull();//判断是否有无效<em>值</em> string str_win9x,str_win2k; if (win9x.Checked) str_win9x = "Yes" ; else str_win9x = "No"; if (win2k.Checked) str_win2k = "Yes" ; else str_win2k = "No"; sql_update = "update winapi set Fun_dll = '"+dll<em>text</em>.<em>Text</em>+"'"+" , Fun_tips = '"+tipsmemo.<em>Text</em>+"'"+" , Fun_code = '"+codememo.<em>Text</em>+"'"+" , Fun_com ='"+mat_<em>text</em>.<em>Text</em>+"' "; sql_update +=" , win9x = '" + str_win9x +"' " + ", win2k = '" + str_win2k+"' "; sql_update +=" where Fun_name ='"+ mysearch.<em>Text</em>+"'"; mycommand.Connection = myconn; mycommand.Command<em>Text</em> = sql_update; mycommand.ExecuteNonQuery(); myconn.Close(); memo_update(); MessageBox.Show(this,"恭喜!更新成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } catch { // tipsmemo.<em>Text</em> = sql_update; MessageBox.Show("没有找到相应记录,更新失败!"); } } } //判断是更新的部分是否有效(不能为空) private void isnull() { if (this.mat_<em>text</em>.<em>Text</em>=="") this.mat_<em>text</em>.<em>Text</em>="没有相关信息"; if (this.codememo.<em>Text</em>=="") this.codememo.<em>Text</em>="没有相关信息"; if (this.tipsmemo.<em>Text</em>=="") this.tipsmemo.<em>Text</em>="没有相关信息"; if (this.dll<em>text</em>.<em>Text</em>=="") this.dll<em>text</em>.<em>Text</em>="没有相关信息"; } //关键字高亮显示 private void mykeyword() { string[] keywords = new string[5]; keywords[0]=mysearch.<em>Text</em>; keywords[1]="string"; keywords[2]="ref"; keywords[3]="int"; keywords[4]="static extern"; for(int i=0;i0) { index++; switch(i) { case 0: codememo.SelectionColor = Color.Red;break; case 1: codememo.SelectionColor = Color.Green;break; case 2: codememo.SelectionColor = Color.Brown;break; case 3: codememo.SelectionColor = Color.Blue;break; case 4: codememo.SelectionColor = Color.Green;break; //default:codememo.SelectionColor = Color.Blue;break; } } } } // //CONST中关键字高亮显示 private void mykeyword1() { string[] keywords = new string[5]; keywords[0]=mysearch.<em>Text</em>; keywords[1]="="; keywords[2]="0"; keywords[3]="int"; keywords[4]="const"; for(int i=0;i0) { index++; switch(i) { case 0: codememo.SelectionColor = Color.Red;break; case 1: codememo.SelectionColor = Color.Blue;break; case 2: codememo.SelectionColor = Color.Green;break; case 3: codememo.SelectionColor = Color.Blue;break; case 4: codememo.SelectionColor = Color.Green;break; //default:codememo.SelectionColor = Color.Blue;break; } if (index>codememo.<em>Text</em>Length) break; } } } // private void button2_Click(object sender, System.EventArgs e) { this.fun_update(); } private void isenable(int i_temp) { if (i_temp==0) { win9x.Enabled=true; win2k.Enabled=true; e_modify.Enabled=true; e_add.Enabled=true; b_modify.Enabled=true; b_add.Enabled=true; } else { win9x.Enabled=false; win2k.Enabled=false; e_modify.Enabled=false; e_add.Enabled=false; b_modify.Enabled=false; b_add.Enabled=false; } } private void button4_Click(object sender, System.EventArgs e) { Application.Exit(); } private void e_modify_CheckedChanged(object sender, System.EventArgs e) { if (e_modify.Checked) b_modify.Enabled = true; else b_modify.Enabled = false; } private void e_add_CheckedChanged(object sender, System.EventArgs e) { if (e_add.Checked) b_add.Enabled = true; else b_add.Enabled = false; } private void timer1_Tick(object sender, System.EventArgs e) { if (this.mat_<em>text</em>.<em>Text</em>Length>0) mat_<em>text</em>.<em>Text</em> = mat_<em>text</em>.<em>Text</em>.Remove(0,1); else mat_<em>text</em>.<em>Text</em> = oldscoll_<em>text</em>; } private void mat_<em>text</em>_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { timer1.Enabled = false ; mat_<em>text</em>.<em>Text</em> = oldscoll_<em>text</em>; } private void codememo_<em>Text</em>Changed(object sender, System.EventArgs e) { } private void tip<em>list</em>_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { } private void menuItem1_Click(object sender, System.EventArgs e) { Control ct = this.ActiveControl; string temp = ct.<em>Text</em>; Clipboard.SetDataObject(temp); } private void menuItem2_Click(object sender, System.EventArgs e) { } } }</a></div></div></div></div> <div class="public_pc_right_footer2020" style="display:none;" data-v-4a5a7f56></div></div> <div id="right-floor-user-content_562" data-editor="{"type":"floor","pageId":143,"floorId":562}" class="user-right-floor right-box main-box detail-user-right" data-v-229a00b0><div class="__vuescroll" style="height:100%;width:100%;padding:0;position:relative;overflow:hidden;"><div class="__panel __hidebar" style="position:relative;box-sizing:border-box;height:100%;overflow-y:hidden;overflow-x:hidden;transform-origin:;transform:;"><div class="__view" style="position:relative;box-sizing:border-box;min-width:100%;min-height:100%;"><!----><div comp-data="[object Object]" baseInfo="[object Object]" community="[object Object]" class="introduce" data-v-4722a3ae><div class="introduce-title" data-v-4722a3ae><div class="img-info" data-v-4722a3ae><a href="https://bbs.csdn.net/forums/DotNET" class="community-img" data-v-4722a3ae><img src="https://img-community.csdnimg.cn/avatar/745f64491f2744dcbce3cd7127270b93.png?x-oss-process=image/resize,m_fixed,h_88,w_88" alt data-v-4722a3ae> <div title=".NET社区" class="community-name" data-v-4722a3ae> .NET社区 </div></a></div></div> <div class="content" data-v-4722a3ae><div class="detail" data-v-4722a3ae><div title="62046" class="item" data-v-4722a3ae><p class="num" data-v-4722a3ae> 62,046 </p> <p class="desc" data-v-4722a3ae> 社区成员 </p></div> <div title="669049" class="item" data-v-4722a3ae><a href="https://bbs.csdn.net/forums/DotNET" target="_blank" data-v-4722a3ae><p class="num" data-v-4722a3ae> 669,049 </p> <p class="desc" data-v-4722a3ae> 社区内容 </p></a></div></div> <div class="detail-btns" data-v-4722a3ae><div class="community-ctrl-btns_wrapper" data-v-0ebf603c data-v-4722a3ae><div class="community-ctrl-btns" data-v-0ebf603c><div class="community-ctrl-btns_item" data-v-0ebf603c><div data-v-160be461 data-v-0ebf603c><div data-report-click="{"spm":"3001.5975"}" data-v-160be461><img src="https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png" alt="" class="img sendTopic" data-v-160be461 data-v-0ebf603c> <span data-v-160be461 data-v-0ebf603c>发帖</span></div> <!----> <!----></div></div><div class="community-ctrl-btns_item" data-v-0ebf603c><div data-v-0ebf603c><img src="https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png" alt="" class="img me" data-v-0ebf603c> <span data-v-0ebf603c>与我相关</span></div></div><div class="community-ctrl-btns_item" data-v-0ebf603c><div data-v-0ebf603c><img src="https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png" alt="" class="img task" data-v-0ebf603c> <span data-v-0ebf603c>我的任务</span></div></div><div class="community-ctrl-btns_item" data-v-0ebf603c><div class="community-share" data-v-4ca34db9 data-v-0ebf603c><div class="handle-item share" data-v-ca030a68 data-v-4ca34db9><span height="384" data-v-ca030a68><div role="tooltip" id="el-popover-7882" aria-hidden="true" class="el-popover el-popper popo share-popover" style="width:265px;display:none;"><!----><div id="tool-QRcode" class="QRcode" data-v-ca030a68><img src="https://csdnimg.cn/release/cmsfe/public/img/shareBg3.9519d347.png" alt="" class="share-bg" data-v-ca030a68> <div class="share-bg-box" data-v-ca030a68><div class="share-content" data-v-ca030a68><img src="https://img-community.csdnimg.cn/avatar/745f64491f2744dcbce3cd7127270b93.png?x-oss-process=image/resize,m_fixed,h_88,w_88" alt="" class="share-avatar" data-v-ca030a68> <div class="share-tit" data-v-ca030a68>.NET社区</div> <div class="share-dec" data-v-ca030a68>.NET技术交流专区</div> <span class="copy-share-url" data-v-ca030a68>复制链接</span> <div class="shareText" data-v-ca030a68> </div></div> <div class="share-code" data-v-ca030a68><div class="qrcode" data-v-ca030a68></div> <div class="share-code-text" data-v-ca030a68>扫一扫</div></div></div></div> </div><span class="el-popover__reference-wrapper"><div data-v-0ebf603c><img src="https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png" alt="" class="img share" data-v-0ebf603c> <span data-v-0ebf603c>分享</span></div></span></span></div> <!----></div></div></div> <!----> <div data-v-4fb59baf data-v-0ebf603c><div class="el-dialog__wrapper ccloud-pop-outer2" style="display:none;" data-v-4fb59baf><div role="dialog" aria-modal="true" aria-label="dialog" class="el-dialog el-dialog--center" style="margin-top:15vh;width:70%;"><div class="el-dialog__header"><span class="el-dialog__title"></span><!----></div><!----><div class="el-dialog__footer"><span class="dialog-footer clearfix" data-v-4fb59baf><div class="confirm-btm fr" data-v-4fb59baf>确定</div></span></div></div></div></div></div></div></div> <div style="display:none;" data-v-4722a3ae data-v-4722a3ae><!----> <div class="introduce-desc" data-v-4722a3ae><div class="introduce-desc-title" data-v-4722a3ae>社区描述</div> <span data-v-4722a3ae> .NET技术交流专区 </span></div></div> <div class="introduce-text" data-v-4722a3ae><div class="label-box" data-v-4722a3ae><span class="label" data-v-4722a3ae>javascript</span><span class="label" data-v-4722a3ae>云原生</span> <span class="label" data-v-4722a3ae>企业社区</span> <!----></div></div> <!----> <div class="manage" data-v-4722a3ae><div class="manage-inner" data-v-4722a3ae><span data-v-4722a3ae>社区管理员</span> <ul data-v-4722a3ae><li data-v-4722a3ae><a href="https://blog.csdn.net/community_93" target="_blank" class="start-img" data-v-4722a3ae><img src="https://profile-avatar.csdnimg.cn/default.jpg!1" alt="ASP.NET" class="el-tooltip item" data-v-4722a3ae data-v-4722a3ae></a></li><li data-v-4722a3ae><a href="https://blog.csdn.net/dotnetconf" target="_blank" class="start-img" data-v-4722a3ae><img src="https://profile-avatar.csdnimg.cn/default.jpg!1" alt=".Net开发者社区" class="el-tooltip item" data-v-4722a3ae data-v-4722a3ae></a></li><li data-v-4722a3ae><a href="https://blog.csdn.net/weixin_41960540" target="_blank" class="start-img" data-v-4722a3ae><img src="https://profile-avatar.csdnimg.cn/aa17748a52c84d88ba031f9895a4ea32_weixin_41960540.jpg!1" alt="R小R" class="el-tooltip item" data-v-4722a3ae data-v-4722a3ae></a></li></ul></div></div> <div class="actions" data-v-4722a3ae><!----> <div style="flex:1;" data-v-4722a3ae><div class="join-btn" data-v-4722a3ae> 加入社区 </div></div> <!----> <!----></div> <div class="el-dialog__wrapper" style="display:none;" data-v-38c57799 data-v-4722a3ae><div role="dialog" aria-modal="true" aria-label="获取链接或二维码" class="el-dialog join-qrcode-dialog" style="margin-top:15vh;width:600px;"><div class="el-dialog__header"><span class="el-dialog__title">获取链接或二维码</span><button type="button" aria-label="Close" class="el-dialog__headerbtn"><i class="el-dialog__close el-icon el-icon-close"></i></button></div><!----><div class="el-dialog__footer"><span class="dialog-footer" data-v-38c57799></span></div></div></div> <div class="collapse-btn" data-v-4722a3ae><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAgCAYAAACFM/9sAAAAAXNSR0IArs4c6QAAAi1JREFUaEPtl01u01AUhc+N8wMSO4AxzJAqwQpKQsdtbMOICmKnwCKQ2ACDIgotrYKiduIiVZ10B0CBAjtAbICfooomJr3IcUoTiVLb15GNuG/67nm65/M5AxP0iAiQSK1iKEBhCBSgAhQSEMo1gQpQSEAo1wQqQCEBoVwT+K8CnLnWvER8cOHMaf95q9Xaj+vDtp3LPeD83u6p9a2t+U5cfVrzmSTQNOfOgg4+ATDAeNHp/Jza3Fz5HtWUZbl3GXjYn2e+53lL96Nq057LBOD0dOOcUSx8BFAcGHpZLlWmVlfnd08yaJrubRAe/Z77HwEG5kdS1E8StgFc9bzFb8dBrNtukxgLwOAXNEF6T/pAce8zSeDhknXbuUNMQRUHe/BrMNX+BNGyHIdBT45m6VVn36/FqX5cOFHmMwUYJrE5x+CgkuEujLe+361ubLS+HhowzeYtEC8NzWyXy5ValMpHgSCZyRxgsLxpui4Ij4/ShZ1S0aiurS18sSznJoOeDt29AaP6t6pLgMTV5gJgsHTddhvEWBwC9Y6AZww8AFA4Lp1xDac9nxuAYZ37aQuqGgIbPTt+t3tluNppw0jyXq4AhnV2ZkG0PAKR8b5UMiaDSicxOU5N7gCGSXRvMLAygPgB3Jv0vOXP4wSR9O1cAgzMzFxvXDR6hYlK5cd6u93eS2pw3LrcAhy38bTeV4BCkgpQAQoJCOWaQAUoJCCUawIVoJCAUK4JVIBCAkL5L1yapyGdIBwvAAAAAElFTkSuQmCC" alt data-v-4722a3ae></div></div><!----><!----><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="floor-user-right-rank" data-v-3d3affee><div class="el-tabs el-tabs--top" data-v-3d3affee><div class="el-tabs__header is-top"><div class="el-tabs__nav-wrap is-top"><div class="el-tabs__nav-scroll"><div role="tablist" class="el-tabs__nav is-top" style="transform:translateX(-0px);"><div class="el-tabs__active-bar is-top" style="width:0px;transform:translateX(0px);ms-transform:translateX(0px);webkit-transform:translateX(0px);"></div></div></div></div></div><div class="el-tabs__content"><div role="tabpanel" id="pane-integral" aria-labelledby="tab-integral" class="el-tab-pane" data-v-3d3affee></div><div role="tabpanel" aria-hidden="true" id="pane-3" aria-labelledby="tab-3" class="el-tab-pane" style="display:none;" data-v-3d3affee></div><div role="tabpanel" aria-hidden="true" id="pane-5" aria-labelledby="tab-5" class="el-tab-pane" style="display:none;" data-v-3d3affee></div><div role="tabpanel" aria-hidden="true" id="pane-6" aria-labelledby="tab-6" class="el-tab-pane" style="display:none;" data-v-3d3affee></div></div></div> <div class="floor-user-right-rank-score" data-v-608528ce data-v-3d3affee><div class="floor-user-right-rank-score-tabs" data-v-608528ce><ul data-v-608528ce><li data-v-608528ce> 近7日 </li><li data-v-608528ce> 近30日 </li><li class="active" data-v-608528ce> 至今 </li></ul></div> <div class="floor-user-right-rank-common" data-v-46cf600d data-v-608528ce><div class="rank-list" data-v-46cf600d><!----> <div class="no-data loading" data-v-46cf600d><i class="el-icon-loading" data-v-46cf600d></i> <p data-v-46cf600d>加载中</p></div> <!----> <a href="https:///DotNET/rank/list/total" target="_blank" class="show-more" data-v-46cf600d> 查看更多榜单 </a></div></div></div></div><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="floor comunity-rule" data-v-3cfa4dbd><div class="title" data-v-3cfa4dbd> 社区公告 </div> <div class="contain" data-v-3cfa4dbd><div class="inner-content" data-v-3cfa4dbd><p>.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。</p> <p>希望和大家一起共同营造一个活跃、友好的社区氛围。</p> </div></div></div><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="user-right-adimg empty-arr" data-v-15c6aa4f><div class="adImgs" data-v-2a6389b9 data-v-15c6aa4f><!----> <div data-v-2a6389b9><!----></div></div></div><div comp-data="[object Object]" baseInfo="[object Object]" community="[object Object]" class="content-right-recommend" data-v-0f781e88><div data-v-3798762e data-v-0f781e88><!----> <!----></div></div><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="ai-entrance" data-v-eb1c454c><p data-v-eb1c454c>试试用AI创作助手写篇文章吧</p> <div class="entrance-btn-line" data-v-eb1c454c><a href="https://mp.csdn.net/edit?guide=1" target="_blank" data-report-click="{"spm":"3001.9712"}" data-report-query="spm=3001.9712" class="entrance-btn" data-v-eb1c454c>+ 用AI写文章</a></div></div></div></div></div></div></div></div></div></div></div></div></div> <div> <script type="text/javascript" src="https://g.csdnimg.cn/common/csdn-footer/csdn-footer.js" data-isfootertrack="false" defer></script> </div></div></div><script> window.__INITIAL_STATE__= {"csrf":"XrxuYy6O-iOCWuTKKx2WdCBtcvOCWF1ZxchE","origin":"http:\u002F\u002Fbbs.csdn.net","isMobile":false,"cookie":"uuid_tt_dd=10_593576200-1713982881179-131173;","ip":"3.137.185.180","pageData":{"page":{"pageId":143,"title":"社区详情","keywords":"社区详情","description":"社区详情","ext":{"isMd":"true","armsfe1":"{pid:\"dyiaei5ihw@1a348e4d05c2c78\",appType:\"web\",imgUrl:\"https:\u002F\u002Farms-retcode.aliyuncs.com\u002Fr.png?\",sendResource:true,enableLinkTrace:true,behavior:true}","redPacketCfg":"{\"presetTitle\":[\"成就一亿技术人!\",\"大吉大利\",\"节日快乐\",\"Bug Free\",\"Hello World\",\"Be Greater Than Average!!\"],\"defaultTitle\":\"成就一亿技术人!\",\"preOpenSty\":{},\"redCardSty\":{}}","blogStar":"[{\"year\":\"2021\",\"enable\":true,\"communityIds\":[3859],\"url\":\"https:\u002F\u002Fbbs.csdn.net\u002Fsummary2021\"},{\"year\":\"2022\",\"enable\":true,\"communityIds\":[3860],\"url\":\"https:\u002F\u002Fbbs.csdn.net\u002Fsummary2022\"}]","mdVersion":"https:\u002F\u002Fcsdnimg.cn\u002Frelease\u002Fmarkdown-editor\u002F1.1.0\u002Fmarkdown-editor.js","componentSortCfg":"{ \"right\":[\"ratesInfo\",\"cty-profile\",\"pub-comp\",\"user-right-introduce\",\"post-event\",\"my-mission\",\"user-recommend\",\"user-right-rank\",\"user-right-rule\",\"user-right-adimg\"] }","show_1024":"{\"enable\":false,\"useWhitelist\":false,\"whitelist\":[76215],\"home\":\"https:\u002F\u002F1111.csdn.net\u002F\",\"logo\":\"https:\u002F\u002Fimg-home.csdnimg.cn\u002Fimages\u002F20221104102741.png\",\"hideLive\":true}","iframes":"[\"3859\"]","pageCfg":"{\"disableDownloadPDF\": false,\"hideSponsor\":false}"}},"template":{"templateId":71,"templateComponentName":"ccloud-detail","title":"ccloud-detail","floorList":[{"floorId":562,"floorComponentName":"floor-user-content","title":"社区详情页","description":"社区详情页","indexOrder":3,"componentList":[{"componentName":"baseInfo","componentDataId":"cloud-detail1","componentConfigData":{},"relationType":3},{"componentName":"user-right-introduce","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-recommend","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-right-rank","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-right-rule","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-right-adimg","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"default2014LiveRoom","componentDataId":"20221024DefaultLiveRoom","componentConfigData":{},"relationType":3}]}]},"data":{"baseInfo":{"customDomain":"","uriName":"DotNET","communityHomePage":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET","owner":{"userName":"community_93","nickName":"ASP.NET","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","position":"","companyName":""},"user":{"userRole":3,"userName":null,"nickName":null,"avatarUrl":null,"rank":null,"follow":2,"communityBase":null,"joinCollege":null,"isVIP":null},"community":{"name":".NET社区","description":".NET技术交流专区","avatarUrl":"https:\u002F\u002Fimg-community.csdnimg.cn\u002Favatar\u002F745f64491f2744dcbce3cd7127270b93.png?x-oss-process=image\u002Fresize,m_fixed,h_88,w_88","qrCode":"","createTime":"2007-09-28","communityAvatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","communityNotice":null,"userCount":62046,"contentCount":669049,"followersCount":49818,"communityRule":"\u003Cp\u003E.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。\u003C\u002Fp\u003E\n\n\u003Cp\u003E希望和大家一起共同营造一个活跃、友好的社区氛围。\u003C\u002Fp\u003E\n","communityId":211,"bgImage":"","hashId":"2lwpzdnk","domain":"","uriName":"DotNET","externalDisplay":1,"adBanner":{"img":"","url":"","adType":0,"adCon":null},"rightBanner":{"img":"","url":"","adType":0,"adCon":null},"tagId":null,"tagName":null,"communityType":2,"communityApplyUrl":"https:\u002F\u002Fmarketing.csdn.net\u002Fquestions\u002FQ2106040308026533763","joinType":0,"visibleType":0,"collapse":0,"topicMoveAble":0,"allowActions":{},"communityOwner":"community_93","tagNameInfo":{"provinceTag":null,"areaTag":null,"technologyTags":[{"id":190,"name":"javascript"},{"id":400064,"name":"云原生"}],"customTags":[{"id":1,"name":"企业社区"}]}},"tabList":[{"tabId":862,"tabName":"问答","tabUrl":"https:\u002F\u002Fask.csdn.net\u002Flist\u002F3\u002Ftag\u002F576","tabSwitch":1,"tabType":0,"tabContribute":0,"indexOrder":0,"iframe":true,"sortType":1},{"tabId":20680,"tabName":".NET Conf China","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":1,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=20680","iframe":false,"sortType":1},{"tabId":1370,"tabName":"全部","tabUrl":"","tabSwitch":1,"tabType":4,"tabContribute":0,"cardType":0,"indexOrder":2,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=1370","iframe":false,"sortType":1},{"tabId":420,"tabName":"招聘","tabUrl":"","tabSwitch":1,"tabType":3,"tabContribute":0,"indexOrder":3,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=420","iframe":false,"sortType":1},{"tabId":23493,"tabName":"社区公告","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":3,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=23493","iframe":false,"sortType":1},{"tabId":22149,"tabName":"寻找 .NET 技术达人","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":4,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=22149","iframe":false,"sortType":1},{"tabId":714,"tabName":".NET Framework","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":5,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=714","iframe":false,"sortType":1},{"tabId":21249,"tabName":".NET Core","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":6,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21249","iframe":false,"sortType":1},{"tabId":21248,"tabName":"微服务","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":7,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21248","iframe":false,"sortType":1},{"tabId":21250,"tabName":".NET5 \u002F 6","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":8,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21250","iframe":false,"sortType":1},{"tabId":21498,"tabName":".NET技术前瞻","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":9,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21498","iframe":false,"sortType":1},{"tabId":21500,"tabName":"VC","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":10,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21500","iframe":false,"sortType":1},{"tabId":21499,"tabName":".NET技术其他语言","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":11,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21499","iframe":false,"sortType":1},{"tabId":21251,"tabName":"ASP_NET","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":12,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21251","iframe":false,"sortType":1},{"tabId":21253,"tabName":"EF","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":13,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21253","iframe":false,"sortType":1},{"tabId":21254,"tabName":"EF Core","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":14,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21254","iframe":false,"sortType":1},{"tabId":715,"tabName":"Web Services","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":15,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=715","iframe":false,"sortType":1},{"tabId":717,"tabName":"桌面应用","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":16,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=717","iframe":false,"sortType":1},{"tabId":716,"tabName":"VB","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":17,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=716","iframe":false,"sortType":1},{"tabId":718,"tabName":"图表区","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":18,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=718","iframe":false,"sortType":1},{"tabId":21258,"tabName":"前端","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":19,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21258","iframe":false,"sortType":1},{"tabId":4055689,"tabName":"博文收录","tabUrl":"","tabSwitch":1,"tabType":2,"tabContribute":0,"cardType":0,"indexOrder":19,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=4055689","iframe":false,"sortType":1},{"tabId":719,"tabName":"分析与设计","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":20,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=719","iframe":false,"sortType":1},{"tabId":1638782,"tabName":"Ada助手","tabUrl":"","tabSwitch":1,"tabType":2,"tabContribute":0,"cardType":0,"indexOrder":20,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=1638782","iframe":false,"sortType":1},{"tabId":720,"tabName":"组件\u002F控件开发","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":21,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=720","iframe":false,"sortType":1},{"tabId":721,"tabName":"AppLauncher","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":22,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=721","iframe":false,"sortType":1},{"tabId":21252,"tabName":"圈内交友","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":23,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21252","iframe":false,"sortType":1}],"dataResource":{"mediaType":"c_cloud","subResourceType":"8_c_cloud_long_text","showType":"long_text","tabId":0,"communityName":".NET社区","communityHomePageUrl":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET","communityType":2,"content":{"id":"50095443","contentId":50095443,"cateId":0,"cateName":null,"url":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F50095443","shareUrl":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F50095443","createTime":"2004-02-15 08:29:56","updateTime":"2021-05-28 14:15:51","resourceUsername":"limlimlim","best":0,"top":0,"text":null,"publishDate":"2004-02-15","lastReplyDate":"2004-02-15","type":"13","nickname":"永远爱好写程序","avatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fd638ed3d6f044619a928a3943ec70ef5_limlimlim.jpg!1","username":"limlimlim","commentCount":5,"diggNum":0,"digg":false,"viewCount":44,"hit":false,"resourceSource":6,"status":10,"taskStatus":null,"expired":false,"taskCate":0,"taskAward":0,"taskExpired":null,"checkRedPacket":null,"avgScore":0,"totalScore":0,"topicTitle":"动态生成DropDownList控件后,在选择改变时获得DropDownList.SelectedItem.Text的值","insertFirst":false,"likeInfo":null,"description":"代码如下,请问如何实现在DropDownList控件选择改变时(SelectedIndexChanged事件) 让ViewState[\"UpdateDepartmentName\"])得到当前选择的文本?? 要求以上功能在如下的DataGrid1_ItemDataBound事件中实现 private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { if(","coverImg":"https:\u002F\u002Fimg-home.csdnimg.cn\u002Fimages\u002F20221026062149.png","content":"代码如下,请问如何实现在DropDownList控件选择改变时(SelectedIndexChanged事件)\u003Cbr \u002F\u003E\n让ViewState["UpdateDepartmentName"])得到当前选择的文本??\u003Cbr \u002F\u003E\n要求以上功能在如下的DataGrid1_ItemDataBound事件中实现\u003Cbr \u002F\u003E\n\t\t\u003Cbr \u002F\u003E\nprivate void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)\u003Cbr \u002F\u003E\n\t\t{\u003C!-- --\u003E\u003Cbr \u002F\u003E\n\t\t\tif(e.Item.ItemType==ListItemType.EditItem)\u003Cbr \u002F\u003E\n\t\t\t{\u003C!-- --\u003E\u003Cbr \u002F\u003E\n\t\t\t\tDropDownList ddl=new DropDownList();\u003Cbr \u002F\u003E\n\t\t\t\tDataSet objDs=new DataSet();\u003Cbr \u002F\u003E\n\t\t\t\tobjDs=clsBase.ExecuteSQL("Select DepartmentName from tblDepartment");\u003Cbr \u002F\u003E\n\t\t\t\tddl.DataSource=objDs.Tables[0].DefaultView;\u003Cbr \u002F\u003E\n\t\t\t\tddl.DataTextField="DepartmentName";\u003Cbr \u002F\u003E\n\t\t\t\tddl.DataValueField="DepartmentName";\u003Cbr \u002F\u003E\n\t\t\t\tddl.DataBind();\u003Cbr \u002F\u003E\n\t\t\t\tif(e.Item.Cells[5].Controls[0].ToString()=="System.Web.UI.WebControls.TextBox")\u003Cbr \u002F\u003E\n\t\t\t\t{\u003C!-- --\u003E\u003Cbr \u002F\u003E\n\t\t\t\t\tTextBox txtBox=(TextBox)e.Item.Cells[5].Controls[0];\u003Cbr \u002F\u003E\n\t\t\t\t\tddl.SelectedIndex=0;\u003Cbr \u002F\u003E\n\t\t\t\t\twhile(e.Item.Cells[5].Controls.Count>0)\u003Cbr \u002F\u003E\n\t\t\t\t\t{\u003C!-- --\u003E\u003Cbr \u002F\u003E\n\t\t\t\t\t\te.Item.Cells[5].Controls.RemoveAt(0);\u003Cbr \u002F\u003E\n\t\t\t\t\t}\u003Cbr \u002F\u003E\n\t\t\t\t\te.Item.Cells[5].Controls.Add(ddl);\u003Cbr \u002F\u003E\n\t\t\t\t\tViewState["UpdateDepartmentName"]=ddl.SelectedItem.Text;\u003Cbr \u002F\u003E\n\t\t\t\t}\u003Cbr \u002F\u003E\n\t\t\t}\u003Cbr \u002F\u003E\n\t\t}","mdContent":null,"pictures":null,"videoInfo":null,"linkInfo":null,"student":{"isCertification":false,"org":"","bala":""},"employee":{"isCertification":false,"org":"深圳柯达公司","bala":""},"userCertification":[],"dependId":"0","dependSubType":null,"videoUrl":null,"favoriteCount":0,"favoriteStatus":false,"taskType":null,"defaultScore":null,"syncAsk":false,"videoPlayLength":null},"communityUser":null,"allowPost":false,"submitHistory":[{"user":{"registerurl":"https:\u002F\u002Fg.csdnimg.cn\u002Fstatic\u002Fuser-reg-year\u002F1x\u002F21.png","avatarurl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fd638ed3d6f044619a928a3943ec70ef5_limlimlim.jpg!1","nickname":"永远爱好写程序","selfdesc":"","createdate":"2003-03-05 17:00:00","days":"7722","years":"21","username":"limlimlim","school":null,"company":null,"job":null},"userName":"limlimlim","event":"创建了帖子","body":"2004-02-15 08:29","editId":null}],"resourceExt":{}},"contentReply":{"pageNo":1,"pageSize":20,"totalPages":1,"totalCount":0,"total":0,"list":[],"maxPageSize":3000},"defaultActiveTab":20680,"recommends":[{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fweixin_38606169\u002F14001875","title":"ASP.NET \u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E\u003Cem\u003E控件\u003C\u002Fem\u003E的使用方法","desc":"1. 数据绑定 代码如下: this.\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E1.DataSource = CategoryManager.getCategories(); \u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E1.DataValueField = “id”;\u002F\u002F用来设置下拉列表选中的 Value \u003Cem\u003E值\u003C\u002Fem\u003E \u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E1.Data\u003Cem\u003EText\u003C\u002Fem\u003EField = “name”;\u002F\u002F为下拉列表选项显示的\u003Cem\u003E值\u003C\u002Fem\u003E \u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E1.DataBind(); 2.读取数据 代码如下: int categoryId = int.Parse(this.\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E1.\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E.Value);\u002F\u002F获取","createTime":"2021-01-01 16:13:00","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-14001875-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-14001875-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"1\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fweixin_38606169\u002F14001875\",\"strategy\":\"2~default~OPENSEARCH~Paid\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-14001875-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"1\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fweixin_38606169\u002F14001875\",\"strategy\":\"2~default~OPENSEARCH~Paid\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-14001875-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fcsdsuper\u002F2442630","title":"C# WinForm\u003Cem\u003E控件\u003C\u002Fem\u003E美化之ImageComboBox","desc":"这篇文章中我们重点需要实现的是(3)、(4)两项功能,下面我们来介绍具体实现的方法。\n\n \n\n第一步,实现ImageComboBoxItem类。\n\n要实现显示图标,当然要给每个项添加与图标相关的信息了,ImageComboBoxItem类应该包括以下内容:文本(\u003Cem\u003EText\u003C\u002Fem\u003E)、缩进的级别(Level)、图标的索引(ImageIndex、ImageKey),用户数据(Tag)。ImageComboBoxItem类实现了ISerializable接口,实现自定义序列化。ImageComboBoxItem类的类视图如下:\n\n \n\n\n图3 ImageComboxItem类视图\n\n\n\n \n\nImageComboBoxItem类的代码如下: \n\n [Serializable]\n [DefaultProperty(\"\u003Cem\u003EText\u003C\u002Fem\u003E\")]\n [TypeConverter(\n typeof(ExpandableObjectConverter))]\n public class ImageComboBoxItem : \n IDisposable, ISerializable\n ...{\n Fields#region Fields\n\n private ImageComboBox _imageComboBox;\n private string _\u003Cem\u003Etext\u003C\u002Fem\u003E = \"ImageComboBoxItem\";\n private ImageComboBoxItemImageIndexer _imageIndexer;\n private object _tag;\n private int _level;\n\n #endregion\n\n Constructors#region Constructors\n\n public ImageComboBoxItem()\n ...{\n }\n\n public ImageComboBoxItem(string \u003Cem\u003Etext\u003C\u002Fem\u003E)\n : this(\u003Cem\u003Etext\u003C\u002Fem\u003E, -1, 0)\n ...{\n }\n\n public ImageComboBoxItem(\n string \u003Cem\u003Etext\u003C\u002Fem\u003E, int imageIndex)\n : this(\u003Cem\u003Etext\u003C\u002Fem\u003E, imageIndex, 0)\n ...{\n }\n\n public ImageComboBoxItem(\n string \u003Cem\u003Etext\u003C\u002Fem\u003E, string imageKey)\n : this(\u003Cem\u003Etext\u003C\u002Fem\u003E, imageKey, 0)\n ...{\n }\n\n public ImageComboBoxItem(\n string \u003Cem\u003Etext\u003C\u002Fem\u003E, int imageIndex, int level)\n : this()\n ...{\n _\u003Cem\u003Etext\u003C\u002Fem\u003E = \u003Cem\u003Etext\u003C\u002Fem\u003E;\n ImageIndexer.Index = imageIndex;\n _level = level;\n }\n\n public ImageComboBoxItem(\n string \u003Cem\u003Etext\u003C\u002Fem\u003E, string imageKey, int level)\n : this()\n ...{\n _\u003Cem\u003Etext\u003C\u002Fem\u003E = \u003Cem\u003Etext\u003C\u002Fem\u003E;\n ImageIndexer.Key = imageKey;\n _level = level;\n }\n\n protected ImageComboBoxItem(\n SerializationInfo info,\n StreamingCon\u003Cem\u003Etext\u003C\u002Fem\u003E con\u003Cem\u003Etext\u003C\u002Fem\u003E)\n : this()\n ...{\n Deserialize(info, con\u003Cem\u003Etext\u003C\u002Fem\u003E);\n }\n\n #endregion\n\n Properties#region Properties\n\n [Localizable(true)]\n ","createTime":"2010-06-09 15:40:38","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-2442630-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-2442630-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"2\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fcsdsuper\u002F2442630\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-2442630-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"2\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fcsdsuper\u002F2442630\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-2442630-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fsuper_zhaowenke\u002F2190657","title":"ExtAspNet v2.2.1 (2009-4-1) \u003Cem\u003E值\u003C\u002Fem\u003E得一看","desc":"ExtAspNet v2.2.1\n\t\nExtAspNet是一组专业的Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E库,拥有原生的AJAX支持和丰富的UI效果,\n目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。\n\n支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+\n\n注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。\n\n示例: http:\u002F\u002Fextasp.net\u002F\n开源: http:\u002F\u002Fextaspnet.codeplex.com\u002F\n博客: http:\u002F\u002Fsanshi.cnblogs.com\u002F\n邮箱: sanshi.ustc@gmail.com\n\n\n发布历史:\n\n+2010-03-28 v2.2.1\n\t+为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 \n\t\t-修正此函数通过PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterStartupScript调用\u003Cem\u003E时\u003C\u002Fem\u003E不能正确显示Icon的BUG(feedback:zhaowenke)。\n\t-修正basic\u002Fhello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。\n\t-隐藏示例首页最外层RegionPanel的边框ShowBorder=\"false\"。\n\t+集成Extjs最新版本v3.1.1。\n\t\t-增加一个新的Theme - Access。\n\t\t-修正了Firefox下Zoom In\u002FOut\u003Cem\u003E时\u003C\u002Fem\u003E页面消失的BUG。\n\t\t-删除Panel的EnableLightBackgroundColor属性,同\u003Cem\u003E时\u003C\u002Fem\u003EEnableBackgroundColor只支持Blue和Gray两种Theme。\n\n\n\n+2010-01-31 v2.2.0\n\t-使得Asp.net的\u003Cem\u003E控件\u003C\u002Fem\u003EImageButton具有和Asp.net的Button\u003Cem\u003E控件\u003C\u002Fem\u003E类似的行为(Ajax提交)(feedback:261629698)。\n\t+TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip\u003Cem\u003E控件\u003C\u002Fem\u003E\u003Cem\u003E动态\u003C\u002Fem\u003E增加删除Tab。\n\t\t-增加示例tabstrip\u002Ftabstrip_addtab.aspx。\n\t-重构了示例网站的架构,目前只有一层IFrame结构。\n\t-为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。\n\t-为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal=\"false\")(feedback:zqmars)。\n\t-Window\u003Cem\u003E控件\u003C\u002Fem\u003E更新。\n\t\t-关闭按钮默认直接关闭,不会弹出确认对话框。\n\t\t-GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。\n\t\t-增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。\n\t\t-修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。\n\t-删除Button\u003Cem\u003E控件\u003C\u002Fem\u003E的SystemIcon属性,比如以前这样定义SystemIcon=\"Close\",现在需要这样定义Icon=\"SystemClose\"。\n\t-WindowPosition默认居中,而不是黄金分割位置。\n\t+Button, Window等\u003Cem\u003E控件\u003C\u002Fem\u003E弹出位置属性的变化。\n\t\t-Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target=\"_self\" -\u003E Target=\"Self\", Target=\"_parent\" -\u003E Target=\"Parent\"。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举\u003Cem\u003E值\u003C\u002Fem\u003ESelf, Parent, Top。\n\t\t-Confirm.GetShowReference的最后一个参数target变为枚举类型。\n\t\t-Alert.GetShowReference中的showInParent参数也变为Target枚举类型。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败\u003Cem\u003E时\u003C\u002Fem\u003E提示对话框的显示位置。\n\n\n\n+2010-01-06 v2.1.9\n\t-集成Extjs最新版本v3.1.0。\n\t-修正灰色皮肤的CSS问题。\n\t-修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。\n\t-为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。\n\t-修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。\n\t-Button\u003Cem\u003E控件\u003C\u002Fem\u003E将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=\"float:left;\"属性。\n\t-修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。\n\t-为TriggerBox和TwinTriggerBox增加EnableEdit属性。\n\t-使用Hidden来显示隐藏ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E,而不是使用Visible属性(Visible目前设置为只读属性)。\n\t-使用Hidden控制Window\u003Cem\u003E控件\u003C\u002Fem\u003E的显示隐藏,Popup已经标记为Obsolete属性。\n\t-Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。\n\t-增加TabStrip中Tab\u003Cem\u003E控件\u003C\u002Fem\u003E可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。\n\t-修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。\n\t-修正HtmlEditor不能编辑的BUG(feedback:TheBox)。\n\t-修正IE下有\u003Cem\u003E时\u003C\u002Fem\u003E会出现空白页面的情况(feedback:olivia919)。\n\t\n\t\n\n+2009-12-06 v2.1.8\n\t-修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。\n\t-修正了IE下Grid中的一个JS问题(feedback:lqm4108)。\n\t-修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。\n\t+集成extjs3.0.3。\n\t\t-修正弹出对话框的宽度计算错误(会保持最小的状态)。\n\t\t-增加新的皮肤Gray。\n\t-为示例工程添加\u003Cem\u003E改变\u003C\u002Fem\u003E语言和皮肤的下拉列表。\n\t-为PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E增加静态函数Refresh,在切换语言和皮肤\u003Cem\u003E时\u003C\u002Fem\u003E使用。\t\n\n\n\n+2009-12-01 v2.1.7\n\t-增加示例(iframe\u002Fparent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。\n\t-修正一些书写错误(feedback:bmck)。\n\t-从Region\u003Cem\u003E控件\u003C\u002Fem\u003E中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。\n\t-BorderPanel更名为RegionPanel。\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E拥有MarkInvalid方法(feedback:sun1299shine)。\n\t-增加中国的省市县三级联动示例(data\u002Fshengshixian.aspx)(feedback:Blues T)。\n\t-修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。\n\t-修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。\n\t\n\t\n\t\n+2009-11-26 v2.1.6\n\t+修正\u003Cem\u003E动态\u003C\u002Fem\u003E创建Grid列的BUG(feedback:gxpan)。\n\t\t-增加示例(data\u002Fgrid_dynamic_columns.aspx)。\n\t-修正Form不能自适应浏览器大小的\u003Cem\u003E改变\u003C\u002Fem\u003E(feedback:kaywood)(WorkItem#6309)。\n\t-增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。\n\t-为容器\u003Cem\u003E控件\u003C\u002Fem\u003E(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。\n\t-重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。\n\t\t\t\n\n\n+2009-11-21 v2.1.5\n\t+Tree优化。\n\t\t-修正Expanded项和Checked项的状态在回发\u003Cem\u003E改变\u003C\u002Fem\u003E后不能保持的BUG。\n\t\t-GetNodeById更名为FindNode,保持和FindControl一致命名。\n\t\t-删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。\n\t\t-删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。\n\t\t-增加示例(data\u002Ftree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。\n\t\t+TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。\n\t\t\t-同\u003Cem\u003E时\u003C\u002Fem\u003E更名的还有GridColumn的ColumnId-\u003EColumnID,GetColumnId-\u003EGetColumnID。\n\t\t\t-Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。\n\t\t-为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。\n\t-为所有\u003Cem\u003E控件\u003C\u002Fem\u003E增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。\n\t-增加示例(other\u002Fcustom_postback.aspx)(feedback:thebox)。\n\t\t-如何自定义Javascript脚本和C#处理函数来响应键盘事件。\n\t-为Tree增加AutoLeafIdentification属性。\n\t\t-增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。\n\t\n\t\n\n+2009-11-17 v2.1.4\n\t-修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。\n\t-部分ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E的设计\u003Cem\u003E时\u003C\u002Fem\u003E支持(会在后续版本中逐步完善)。\n\t-v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计\u003Cem\u003E时\u003C\u002Fem\u003E属性,和运行\u003Cem\u003E时\u003C\u002Fem\u003E是否保持状态没有关系。\n\t-修正CheckBox\u003Cem\u003E控件\u003C\u002Fem\u003E的CheckedChanged事件会被触发两次的BUG(Data PostBack-\u003EAutoPostBack, Event PostBack-\u003EEnablePostBack)。\n\t-为\u003Cem\u003EText\u003C\u002Fem\u003EBox,\u003Cem\u003EText\u003C\u002Fem\u003EArea,DatePicker,NumberBox,TriggerBox等\u003Cem\u003E控件\u003C\u002Fem\u003E增加AutoPostBack属性(feedback:dk3214)。\n\t+为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败\u003Cem\u003E时\u003C\u002Fem\u003E提示信息。\n\t\t-为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。\n\t+为表单字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。\n\t\t-增加示例:form\u002Fform_validate.aspx\n\t\n\t\n\n+2009-10-19 v2.1.3\n\t+增加支持在AJAX\u003Cem\u003E时\u003C\u002Fem\u003E\u003Cem\u003E改变\u003C\u002Fem\u003E的\u003Cem\u003E控件\u003C\u002Fem\u003E属性列表(\u002Fajax.aspx)。\n\t\t-ExtAspNet支持原生的AJAX,也就是说\u003Cem\u003E控件\u003C\u002Fem\u003E的属性\u003Cem\u003E改变\u003C\u002Fem\u003E在AJAX过程中会反映到页面中,但并不是所有的\u003Cem\u003E控件\u003C\u002Fem\u003E属性都支持AJAX\u003Cem\u003E改变\u003C\u002Fem\u003E。\n\t-加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)。\n\t-在AJAX回发后确保Asp.net的按钮\u003Cem\u003E控件\u003C\u002Fem\u003E仍然具有AJAX的特性。\n\t-更新\u002Fbasic\u002Flogin.aspx示例,使用验证图片(feedback:kedee)。\n\t-为Grid增加AutoPostBack属性和RowClick事件,示例在\u002Fdata\u002Fgrid_autopostback.aspx(feedback:chenguizhu2006)。\n\t-为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。\n\t-Grid中TemplateField\u003Cem\u003E生成\u003C\u002Fem\u003E到页面中\u003Cem\u003E控件\u003C\u002Fem\u003E具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。\n\t\n\t\n\n+2009-09-27 v2.1.2\n\t-为Tree\u003Cem\u003E控件\u003C\u002Fem\u003E增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。\n\t-修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。\n\t-增加pt_BR语言,由Ujvari提供。\n\t+为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。\n\t\t-如果Panel具有IconUrl属性,则IconUrl优先于Icon。\n\t\t-所有Icon的列表在icon.aspx。\n\t-为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的\u003Cem\u003E值\u003C\u002Fem\u003E)增加Icon属性。\n\t\n\t\n\n+2009-09-15 v2.1.1\n\t-修正不能\u003Cem\u003E动态\u003C\u002Fem\u003E修改AccordionPane属性Items的BUG。\n\t+为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。\n\t\t-如果需要在父页面弹出确认对话框,需要设置ConfirmTarget=\"_parent\"(类似Window\u003Cem\u003E控件\u003C\u002Fem\u003E的Target=\"_parent\")。\n\t+为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。\n\t\t-一个典型应用,在Window\u003Cem\u003E控件\u003C\u002Fem\u003E中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。\n\t\t-ExtAspNet.Alert.Show(\"参数错误!\", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());\n\t+TreeNode的前面的多选框可以自动回发了。\n\t\t-为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。\n\t\t-示例在:http:\u002F\u002Fextasp.net\u002Fdata\u002Ftree_run.aspx\n\t-Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项\u003Cem\u003E时\u003C\u002Fem\u003E在父页面弹出对话框的JS代码。\n\t-修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。\n\t-添加定\u003Cem\u003E时\u003C\u002Fem\u003E器\u003Cem\u003E控件\u003C\u002Fem\u003ETimer,用来定\u003Cem\u003E时\u003C\u002Fem\u003E发起AJAX请求。\n\t\n\t\n\n+2009-09-06 v2.1.0\n\t-Button的Pressed属性\u003Cem\u003E值\u003C\u002Fem\u003E能够正确的反映客户端的变化。\n\t-优化Tree\u003Cem\u003E控件\u003C\u002Fem\u003E的AJAX实现。\n\t+为页面的Form添加autocomplete=\"off\"属性。\n\t\t-参考http:\u002F\u002Fwww.cnblogs.com\u002Fsanshi\u002Farchive\u002F2009\u002F09\u002F04\u002F1560146.html#1635830\n\t+添加对extjs3.0中所有语言的支持。\n\t\t-ExtAspNet扩展的多语言包在js\\languages\\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现\n\t\t-你可以向其中添加自己的语言版本,并执行js\\languages下的pack.bat打包,最后编译工程。\n\t\n\t\n\t\n+2009-09-01 v2.0.9\n\t-为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。\n\t+在aspx页面中必须显示的声明\u003Cem\u003E控件\u003C\u002Fem\u003E的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。\n\t\t-这将会影响所有的aspx页面,所以要特别关注。\n\t-重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称).\n\t+所有的面板默认有两个集合属性(Toolbars和Items).\n\t\t-尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此\u003Cem\u003E时\u003C\u002Fem\u003EItems是只读的).\n\t\t-这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。\n\t-祝你生日快乐 - 小师妹妹。\n\n\n\n+2009-08-29 v2.0.8\n\t-ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。\n\t-将所有的示例转化为英语版本。\n\t-修正Tree\u003Cem\u003E控件\u003C\u002Fem\u003E的一个BUG(定义Mappings属性\u003Cem\u003E时\u003C\u002Fem\u003E)。\n\t+PageManager.Instance应该存在于HttpCon\u003Cem\u003Etext\u003C\u002Fem\u003E.Current,而不是一个全局变量。\n\t -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。\n\t+去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。\n\t -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。\n\t\n\t\n\n+2009-08-25 v2.0.7\n -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。\n -Grid的Values属性访问限制由internal改为public,这就意味这可以自由\u003Cem\u003E改变\u003C\u002Fem\u003EGrid中每个单元格的\u003Cem\u003E值\u003C\u002Fem\u003E了。\n -增加示例-如何将Grid\u003Cem\u003E控件\u003C\u002Fem\u003E导出为Excel(data\\grid_excel_run.aspx)(feedback:503684912)。\n -如果TreeNode的属性Enabled=\"false\",则此项变灰并且不会被选中(feedback:your568)。\n -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~\u002F开头)的BUG。\n -增加Accordion和Tree配合使用的示例(other\\accordion_tree_run.aspx)。\n -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。\n +去除PageLayout\u003Cem\u003E控件\u003C\u002Fem\u003E,此\u003Cem\u003E控件\u003C\u002Fem\u003E可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。\n\t\t-这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。\n\t\t-简单方便,示例可以参考 default.aspx 或者 other\\accordion_tree_run.aspx。\n \n \n\n+2009-08-14 v2.0.6\n\t-\u003Cem\u003E动态\u003C\u002Fem\u003E\u003Cem\u003E生成\u003C\u002Fem\u003E菜单实例(other\\menu_dynamic_run.aspx和other\\menu_dynamic2_run.aspx)(feedback:shguo)。\n\t-优化AJAX的内部实现,每个页面保存的ViewState现在减少1\u002F3左右(重要更新)。\n\t-优化Tree节点的NodeId自动\u003Cem\u003E生成\u003C\u002Fem\u003E,减少ViewState占用。\n\t\n\n\n+2009-08-09 v2.0 beta5\n\t+ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。\n\t\t-在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior=\"false\"\n\t\t--也就是说\u003Cem\u003E生成\u003C\u002Fem\u003E的input的type不能是\"submit\",而这个限制在有些情况下是不可原谅的。\n\t\t--我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。\n\t+PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E了。\n\t\t-在Page_Load中设置了哪些需要在AJAX中更新的Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E会在回发\u003Cem\u003E时\u003C\u002Fem\u003E保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的\u003Cem\u003E控件\u003C\u002Fem\u003E。\n\t\t-示例在aspnet\\fckeditor_run.aspx和aspnet\\aspnet_run.aspx。\n\t\t-FCKEditor和上传\u003Cem\u003E控件\u003C\u002Fem\u003E兼容。示例在aspnet\\fileupload_run.aspx。\n\t-修正Toolbar\u003Cem\u003EText\u003C\u002Fem\u003E的文本在AJAX下更新的BUG。\n\t-Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。\n\t-更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。\n\t\n\n\n+2009-08-02 v2.0 beta4\n\t+和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。\n\t\t-采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。\n\t\t-现在支持Response.Redirect,你可以\u003Cem\u003E选择\u003C\u002Fem\u003EResponse.Redirect或者ExtAspNet.PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.Redirect重定向页面,两者效果一样。\n\t\t-支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。\n\t-Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。\n\t-修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。\n\t-修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。\n\t-增加Menu和Accordion的示例。\n\t-修正Window\u003Cem\u003E控件\u003C\u002Fem\u003E的IconUrl有\u003Cem\u003E时\u003C\u002Fem\u003E不显示(Target=\"_parent\")的BUG[feedback:xmq&mgzhenhong]。\n\t\n\n\n+2009-07-22 v2.0 beta3\n\t-兼容FCKEditor。\n\t-在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。\n\t\n\n\n+2009-07-13 v2.0 beta2\n\t-集成extjs最新版本v3.0。\n\t+兼容IE6.0-7.0-8.0。\n\t\t-这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。\n\t\t-目前先禁用IE6.0-7.0的QuickTips。\n\t-优化底层JavaScript。\n\t\n\t\n\t\n+2009-07-05 v2.0 beta1\n\t-更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。\n\t-使用YUI Compressor压缩JavaScript和CSS文件。\n\t-Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。\n\t-ExtAspNet自身的CSS会紧挨着页面\u003Ctitle\u003E标签引入,这样在\u003Chead\u003E中自定义的样式可以覆盖ExtAspNet缺省样式。\n\t+Alert对话框会遮挡所有的Window窗口。\n\t\t-使用一个变通的方法解决,因为无法\u003Cem\u003E改变\u003C\u002Fem\u003EExt.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。\t\n\t-为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。\n\t-因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。\n\t-重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。\n\t-更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。\n\t-更新示例工程。\n\t\n\t\n\n+2009-03-25 v1.3.1\n\t-Tree在AJAX回发展开节点\u003Cem\u003E时\u003C\u002Fem\u003EJS错误[feedback:xlli]。[fixed]\n\t-Window中的EnableIFrame==false,则点击关闭按钮\u003Cem\u003E时\u003C\u002Fem\u003E报JS错误。[fixed]\n\t-页面包含FileUpload\u003Cem\u003E控件\u003C\u002Fem\u003E,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet\u002Ffileupload.aspx)[fixed]\n\t-HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。[fixed]\n\t\n\t\n\n+2009-03-03 v1.3.0\n\t-如果弹出的窗口(Ext-Window)含有ASP.NET\u003Cem\u003E控件\u003C\u002Fem\u003EFileUpload,则此弹出窗口在关闭\u003Cem\u003E时\u003C\u002Fem\u003E出现JS错误(http:\u002F\u002Fextjs.com\u002Fforum\u002Fshowthread.php?t=8129)[feedback:xlli]。[fixed]\n\t-如果页面中存在ASP.NET\u003Cem\u003E控件\u003C\u002Fem\u003E(\u003Cem\u003EText\u003C\u002Fem\u003EBox),则第二次提交表单就会报错(视图状态不对,其实\u003Cem\u003E时\u003C\u002Fem\u003E没有更新EventValidation隐藏字段导致的问题)。[fixed]\n\t-页面上放置ExtAspNet-Button和ASP.NET-Button,则点击ExtAspNet-Button\u003Cem\u003E时\u003C\u002Fem\u003E激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。[fixed]\n\t-ExtAspNet内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。[added]\n\t+如果以前你听过不要在ExtAspNet工程中使用ASP.NET标准\u003Cem\u003E控件\u003C\u002Fem\u003E的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E和ASP.NET标准\u003Cem\u003E控件\u003C\u002Fem\u003E和平共处了。[fixed]\n\t\t-如果一个ASP.NET按钮\u003Cem\u003E控件\u003C\u002Fem\u003E要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior=\"false\" 即可。\n\t\t-如果要在一次ExtAspNet的原生AJAX回发\u003Cem\u003E时\u003C\u002Fem\u003E更新ASP.NET\u003Cem\u003E控件\u003C\u002Fem\u003E的\u003Cem\u003E值\u003C\u002Fem\u003E,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet\u002Faspnet.aspx)。\n\n\n\n+2009-02-27 v1.2 beta9\n\t-网络连接出错\u003Cem\u003E时\u003C\u002Fem\u003E的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed]\n\t-自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed]\n\t+系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed]\n\t\t-底层使用Javascript创建一个Window\u003Cem\u003E控件\u003C\u002Fem\u003E的代码由原来的2000字符减少为500个字符。\t\n\t\t-PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。\n\t\t---[updated]删除PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference\u002FGetConfirmFormModifiedCloseRefreshReference\u002FGetConfirmFormModifiedClosePostBackReference三个方法代替。\n\t\t-不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串\n\t\t-去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.GetFormModifiedConfirmReference获取此方法的客户端脚本。\n\t\t---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误!\n\t\t-A页面有Ext-Window\u003Cem\u003E控件\u003C\u002Fem\u003E弹出B页面,B页面有Ext-Window\u003Cem\u003E控件\u003C\u002Fem\u003E弹出C页面,B页面的Ext-Window\u003Cem\u003E控件\u003C\u002Fem\u003E设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。\n\t\t---当\u003Cem\u003E时\u003C\u002Fem\u003E如果用户直接访问B页面,就会报JS错误,因为此\u003Cem\u003E时\u003C\u002Fem\u003E找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。\n\t\t-Window\u003Cem\u003E控件\u003C\u002Fem\u003E的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单\u003Cem\u003E改变\u003C\u002Fem\u003E,然后关闭弹出窗口的客户端脚本”。\n\t\t---为Window\u003Cem\u003E控件\u003C\u002Fem\u003E增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单\u003Cem\u003E改变\u003C\u002Fem\u003E,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。\n\t\t---Window\u003Cem\u003E控件\u003C\u002Fem\u003E的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。\n\t\t---现在可以很方便的为Window\u003Cem\u003E控件\u003C\u002Fem\u003E的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。\n\t\t-如果弹出窗口(Window\u003Cem\u003E控件\u003C\u002Fem\u003E)中IFrame的页面不能正常加载(网络暂\u003Cem\u003E时\u003C\u002Fem\u003E出错或页面抛出异常),则此\u003Cem\u003E时\u003C\u002Fem\u003E点击右上角的关闭按钮会报JS错误,因为此\u003Cem\u003E时\u003C\u002Fem\u003E页面尚未加载完毕。\n\t\t---此版本修正了这个BUG,即\u003Cem\u003E时\u003C\u002Fem\u003E页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。\n\t\t-Window\u003Cem\u003E控件\u003C\u002Fem\u003E的IFrameName属性是自动\u003Cem\u003E生成\u003C\u002Fem\u003E的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。\n\t\t-CurrentActiveWindow改名为ActiveWindow。\n\t\t-[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values)\n\t\t---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。\n\t\t\n\t\n\n+2009-02-23 v1.2 beta8\n\t-ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed]\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E在Ajax回发\u003Cem\u003E时\u003C\u002Fem\u003E不能计算模拟树的数据[feedback:huihuang]。[fixed]\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E在页面第一次加载\u003Cem\u003E时\u003C\u002Fem\u003E没有不可\u003Cem\u003E选择\u003C\u002Fem\u003E项,则回发\u003Cem\u003E时\u003C\u002Fem\u003E也不会有不可\u003Cem\u003E选择\u003C\u002Fem\u003E项的BUG。[fixed]\n\t-升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed]\n\t-页面加载过程中的\u003Cem\u003E时\u003C\u002Fem\u003E间信息保存在Javascript变量window.box.timeInfo中。[added]\n\t+增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed]\n\t\n\t\n\n+2008-10-28 v1.2 beta7\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E没有选中任何一项,回发\u003Cem\u003E时\u003C\u002Fem\u003E报错[feedback:huihuang]。[fixed]\n\t-Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed]\n\t+PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E优化。[fixed]\n\t\t-去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。\n\t\t-去除RegisterStartupScript的重载函数,只保留最简单的PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterStartupScript(string script)函数。\n\t\t-Resirect增加重载函数Redirect(string url, string target),其中target可能的取\u003Cem\u003E值\u003C\u002Fem\u003E为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。\n\t-Image\u003Cem\u003E控件\u003C\u002Fem\u003E增加ImageWidth\u002FImageHeight\u002FImageCssStyle\u002FImageCssClass\u002FImageAlt属性[feedback:jqpeng]。[fixed]\n\t-发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。[fixed]\n\t-ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed]\n\t-Row和Column布局\u003Cem\u003E时\u003C\u002Fem\u003E,修正IE下设置RowHeight=\"100%\"\u003Cem\u003E时\u003C\u002Fem\u003E显示不正确的BUG。[fixed]\n\t-AccordionLink当鼠标移上和移开\u003Cem\u003E时\u003C\u002Fem\u003E,有背景色的变化效果[feedback:huihuang]。[fixed]\n\t+TabStrip的Tab\u003Cem\u003E控件\u003C\u002Fem\u003E的EnablePostBack属性会在回发\u003Cem\u003E时\u003C\u002Fem\u003E保持(也即是说如果EnablePostBack=true,回发\u003Cem\u003E时\u003C\u002Fem\u003E没\u003Cem\u003E改变\u003C\u002Fem\u003EEnablePostBack的\u003Cem\u003E值\u003C\u002Fem\u003E,则每次切换到此Tab都会回发)。[fixed]\n\t\t-有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。\n\t\n\t\n\n+2008-10-20 v1.2 beta6\n\t+使用\u003Cem\u003E控件\u003C\u002Fem\u003E的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed]\n\t\t-需要替换新的blowery.Web.HttpCompress.dll,解决方案见http:\u002F\u002Fpohee.com\u002Fit\u002Fhttp-compression-in-aspnet-20\u002F。\n\t+\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E优化。[fixed]\n\t\t-去除EnableFirstItem\u002FFirstItem\u003Cem\u003EText\u003C\u002Fem\u003E\u002FFirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。\n\t\t 现在可以方便的在后台\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E1.Items.Insert(0, new ExtAspNet.\u003Cem\u003EList\u003C\u002Fem\u003EItem(\"全部\", \"-1\"));来达到同样的效果。\n\t\t+如果某项(\u003Cem\u003EList\u003C\u002Fem\u003EItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。\n\t\t\t-和Asp.net中的保持一致,\u003Cem\u003EList\u003C\u002Fem\u003EItem的Value\u003Cem\u003E值\u003C\u002Fem\u003E可以为空字符串。 也就是可以这样写\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E1.SelectedValue = \"\";\n\t\t-\u003Cem\u003EList\u003C\u002Fem\u003EItemCollection增加重载函数Add(string \u003Cem\u003Etext\u003C\u002Fem\u003E, string value),这样方便后台添加列表项。\n\t-处于布局内的容器\u003Cem\u003E控件\u003C\u002Fem\u003E(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed]\n\t-注意,\u003Cem\u003E控件\u003C\u002Fem\u003E的高度指的是整个\u003Cem\u003E控件\u003C\u002Fem\u003E的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding\u002Fborder-width\u002Fmargin)。[fixed]\n\t+为所有\u003Cem\u003E控件\u003C\u002Fem\u003E属性增加在VS中的智能提示。[fixed]\n\t\t-需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll\u003Cem\u003E时\u003C\u002Fem\u003Exml会被拷贝到bin目录下,提供VS的智能提示。\n\t+\u003Cem\u003E控件\u003C\u002Fem\u003E的属性如果是枚举类型,如果此属性可以不取\u003Cem\u003E值\u003C\u002Fem\u003E,则默认为None。[fixed]\n\t\t-TriggerIconType.Default -\u003E TriggerIconType.None\n\t\t-SystemIconType.Empty -\u003E SystemIconType.None\n\t\t-RegexPattern.USER_DEFINED -\u003E RegexPattern.None\n\t-表单验证属性名称变化(ValueToCompare-\u003ECompareValue,ControlToCompare-\u003ECompareControl)。[fixed]\n\t+注意:一个属性可以拥有多个\u003Cem\u003E值\u003C\u002Fem\u003E的情况。[fixed]\n\t\t-属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。\n\t\t-其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。\n\t+AccordionLink实现为\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\t-可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion-\u003EAccordionLink)(示例在other\u002Faccordion_links_run.aspx,other\u002Faccordion_links_run_iframe_htm)[feedback:jima]。\n\t+确认:可以方便的\u003Cem\u003E动态\u003C\u002Fem\u003E添加\u003Cem\u003E控件\u003C\u002Fem\u003E,并且可以给\u003Cem\u003E控件\u003C\u002Fem\u003E添加服务器端事件(示例在form\u002Fform_dynamic_run.aspx)。[fixed]\n\t\n\t\n\t\n+2008-10-15 v1.2 beta5\n\t-验证表单字段的ValueToCompare属性,为字符串\u003Cem\u003E时\u003C\u002Fem\u003E会出错的BUG。[fixed]\n\t+优化下拉列表。[fixed]\n\t\t-验证下拉列表\u003Cem\u003E时\u003C\u002Fem\u003E,应该取\u003Cem\u003EList\u003C\u002Fem\u003EItem的Value属性进行验证,而不是\u003Cem\u003EText\u003C\u002Fem\u003E属性。\n\t\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。\n\t\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E不支持Empty\u003Cem\u003EText\u003C\u002Fem\u003E属性。\n\t\t-\u003Cem\u003EList\u003C\u002Fem\u003EItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可\u003Cem\u003E选择\u003C\u002Fem\u003E,以及创建模拟下拉树。\n\t\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。\n\t\n\t\n\n+2008-09-27 v1.2 beta4\n\t+EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会\u003Cem\u003E改变\u003C\u002Fem\u003EAccordion的标题大小,而不会对AccordionPanel起作用(示例见other\u002Faccordion_run.aspx)。[fixed]\n\t\t-Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。\n\t\t-影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。\n\t-AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed]\n\t+AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other\u002Faccordion_links_run.aspx)。[fixed]\n\t\t-原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上\u003CItems\u003E标签。\n\t\t-适当增大AccordionPanel中链接的高度20px-\u003E22px,同\u003Cem\u003E时\u003C\u002Fem\u003E对链接的样式也做了微调。\n\t\t-通过BodyPadding控制链接列表的边距。\n\t\t-这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台\u003Cem\u003E动态\u003C\u002Fem\u003E添加链接,效果很赞,此需求由马季提出。\n\t\n\t\n\t\n+2008-09-25 v1.2 beta3\n\t+代码优化与设计\u003Cem\u003E时\u003C\u002Fem\u003E支持(尚需要不断完善,目前可以在ASPX页切换到“设计\u003Cem\u003E时\u003C\u002Fem\u003E”,方便属性的更改和事件处理函数的添加)。[fixed]\n\t\t-Panel\u002FGroupPanel\u002FContentPanel\u002FTree\u002FHiddenField\u002FPageLoading\n\t\t-TabStrip\u002FToolbar\n\t-TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed]\n\t-向Form中\u003Cem\u003E动态\u003C\u002Fem\u003E添加\u003Cem\u003E控件\u003C\u002Fem\u003E的BUG,现在form\u002Fform_dynamic_run.aspx示例已经能正确运行。[fixed]\n\t+大部分容器的子\u003Cem\u003E控件\u003C\u002Fem\u003E集合更正为Items(以前有些是Rows)。[fixed]\n\t\t-影响的\u003Cem\u003E控件\u003C\u002Fem\u003E包括Toolbar\u002FAccordion\u002FAccordionPanel\u002FGroupPanel\u002FPanel\u002FSimpleForm\u002FWindow等。\n\t\t-保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。\n\t\t-保留TabStrip的Tabs(TabCollection)属性。\n\t\t-保留PageLayout\u002FBorderLayout的Regions(RegionCollection)属性。\n\t-预祝今晚神七发射成功。\n\t\n\t\n\t\n+2008-09-22 v1.2 beta2\n\t+Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed]\n\t\t-表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项\u003Cem\u003E时\u003C\u002Fem\u003E数组越界。所有使用box\u003Cem\u003E控件\u003C\u002Fem\u003E的应用程序都受到此BUG的影响,需尽快更新到新版本。\n\t+代码优化与设计\u003Cem\u003E时\u003C\u002Fem\u003E支持(示例中表单\u003Cem\u003E控件\u003C\u002Fem\u003E都已支持设计)。[fixed]\n\t\t-PageManager\u002FSimpleForm\u002FButton\u002FHyperLink\u002FLabel\u002FImage\u002FLinkButton\u002F\u003Cem\u003EText\u003C\u002Fem\u003EBox\n\t\t-TriggerBox\u002FTwinTriggerBox\u002FWindow\u002F\u003Cem\u003EText\u003C\u002Fem\u003EArea\u002FHtmlEditor\u002FDatePicker\u002FNumberBox\n\t\t-CheckBox\u002FRadioButton\u002FRadioButton\u003Cem\u003EList\u003C\u002Fem\u003E\u002F\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E\n\t\t-Grid\n\n\n\n+2008-09-19 v1.2 beta1\n\t-Image\u002FLinkButton\u002FHyperLink增加一些Ajax可更新属性。[fixed]\n\t+隐藏的方式由HideMode属性控制Visibility\u002FOffsets\u002FDisplay。[fixed]\n\t\t-修正Form\u002FSimpleForm中隐藏一个表单字段(Hidden=false)会占据页面空间的BUG。\n\t-Toolbar\u003Cem\u003EText\u003C\u002Fem\u003E\u002FToolbarFill\u002FToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed]\n\t-Button去除MarginRight属性(可以通过CssStyle=\"margin-right:5px;\"达到相同的效果)[fixed]\n\t\n\t\n\t\n+2008-09-09 v1.1\n\t+Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在\u003Cem\u003E控件\u003C\u002Fem\u003E中。[fixed]\n\t\t-网报:CssClass=\"toolbar-pagemenu\" CssStyle=\"border:0px;\",同\u003Cem\u003E时\u003C\u002Fem\u003E定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(..\u002Fimages\u002Fpagemenu_toolbar_background.gif) repeat-x left top;}。\n\t-Region去除默认的Layout=Fit,如果希望Region使用Fit\u002FAnchor\u002FColumn\u002FRow等布局的话,需要手工指定。[fixed]\n\t-ToolbarSeparator\u002FToolbarFill在Ajax更新Hidden属性的BUG。[fixed]\n\t+布局整理。[fixed]\n\t\t-新增Column\u002FAbsolute\u002FRow三种布局,加上以前的Container\u002FFit\u002FAnchor\u002FAccordion\u002FBorder\u002FForm六种布局,总共有9中布局可供使用。\n\t\t-其中一些\u003Cem\u003E控件\u003C\u002Fem\u003E默认使用一种布局:SimpleForm(Form)\u002FForm(Form)\u002FPanel-GroupPanel(Container)\u002FAccordion(Accordion)\u002FPageLayout(Border)\u002FBorderLayout(Border)\u002FTabStrip(Card),所有布局\u003Cem\u003E控件\u003C\u002Fem\u003E默认的布局是Container。\n\t\t-经常用到的布局\u003Cem\u003E控件\u003C\u002Fem\u003E:SimpleForm\u002FForm\u002FAccordion\u002FTabStrip\u002FBorderLayout,经常用到的布局:Fit\u002FRow\u002FAnchor\n\t\n\t\n\t\n+2008-09-08 v1.1 beta7\n\t-MenuButton\u002FMenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick=\"false\" CssStyle=\"cursor:default;\" [feedback:huayu]。[fixed]\n\t-MenuButton\u002FMenuHyperLink\u002FMenuSeparator\u002FMenu\u003Cem\u003EText\u003C\u002Fem\u003E增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax\u003Cem\u003E时\u003C\u002Fem\u003E显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed]\n\t+大部分的ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E增加Hidden属性(少数几个\u003Cem\u003E控件\u003C\u002Fem\u003E没有此属性:Menu),这样在Ajax\u003Cem\u003E时\u003C\u002Fem\u003E可以显示隐藏\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\t-注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的\u003Cem\u003E控件\u003C\u002Fem\u003E渲染到客户端但是隐藏。\n\t\t-US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。\n\t\t-网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。\n\n\n\n+2008-09-04 v1.1 beta6\n\t-PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed]\n\t+模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed]\n\t\t-因为if(\"0,2,9,11,\".indexOf('1,')\u003E=0){ok},这显然是不对的,此BUG涉及很多\u003Cem\u003E控件\u003C\u002Fem\u003E(Grid,\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E,TabStrip)。\n\t\t-解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) \u003E= 0){ok}。\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E在Ajax\u003Cem\u003E时\u003C\u002Fem\u003E应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed]\n\t-Button\u002FMenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed]\n\t-Tree的Ajax支持(尚需优化)。[fixed]\n\t\n\t\n\n+2008-09-02 v1.1 beta5\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E如果第一次没有绑定\u003Cem\u003E值\u003C\u002Fem\u003E,应该绑定到[[]](二维数组),而不是[](一维数组)。[fixed]\n\t-模拟树的\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载\u003Cem\u003E时\u003C\u002Fem\u003E,即使没有数据也需要设置Data\u003Cem\u003EText\u003C\u002Fem\u003EField\u002FDataValueField\u002FDataSimulateTreeLevelField\u002FDataEnableSelectField等属性的\u003Cem\u003E值\u003C\u002Fem\u003E,否则Ajax回发\u003Cem\u003E时\u003C\u002Fem\u003E会出错)。[fixed]\n\t-UserControlConnector导致的Ajax错误,去除UpdatePanelConnector\u003Cem\u003E控件\u003C\u002Fem\u003E(以后不会用AspnetAjax,这个\u003Cem\u003E控件\u003C\u002Fem\u003E已经完成使命)。[fixed]\n\t-不要使用Asp.net的\u003Cem\u003E控件\u003C\u002Fem\u003EHiddenField,而是使用ExtAspNet的HiddenField,因为Asp.net的\u003Cem\u003E控件\u003C\u002Fem\u003E在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed]\n\t-网报Ajax整合基本完成(除了待审批-\u003E下一步[审核\u002F归档\u002F出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed]\n\t-IE下,RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E中项如果存在汉字,则会换行的BUG。[fixed]\n\t-增加两个Theme[Slate\u002FBlack](样式尚需完善)。[fixed]\n\t\n\t\n\t\n+2008-09-01 v1.1 beta4\n\t-非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed]\n\t-RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E去除EnableBackgroundColor\u002FEnableLightBackgroundColor属性,背景色是透明的,也就是和父\u003Cem\u003E控件\u003C\u002Fem\u003E(SimpleForm\u002FForm)的背景色一致。[fixed]\n\t-TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed]\n\t-Web.config中增加配置项FormLabelWidth=\"80\"(默认为80),同\u003Cem\u003E时\u003C\u002Fem\u003EPageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm\u002FForm的表单字段标题的宽度。[fixed]\n\t+完善Ajax。[fixed]\n\t\t-RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E增加Ajax可更新属性SelectedIndex(SelectedValue\u002F\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E)。\n\t\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E增加Ajax可更新属性Enable\u002FSelectedIndex(SelectedValue\u002F\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E)\u002FDataSource。\n\t\t-Grid增加Ajax可更新属性Columns(也就是说Grid列在回发\u003Cem\u003E时\u003C\u002Fem\u003E隐藏显示了一些,也能正确的Ajax)。\n\t\t-Toolbar\u003Cem\u003EText\u003C\u002Fem\u003E增加Ajax可更新属性\u003Cem\u003EText\u003C\u002Fem\u003E。\n\t\t\n\t\t\n\t\t\n+2008-08-31 v1.1 beta3\n\t-TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed]\n\t-重定向页面,使用系统的方法 PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.Redirect(string url),使用Response.Redirect方法会出错。[fixed]\n\t+安全的Ajax设计。[fixed]\n\t\t-这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同\u003Cem\u003E时\u003C\u002Fem\u003E在速度上会有进一步的提升。\n\t\t-基本思想:安全的Ajax交互,明确Ajax回发\u003Cem\u003E时\u003C\u002Fem\u003E支持\u003Cem\u003E控件\u003C\u002Fem\u003E哪些属性的\u003Cem\u003E改变\u003C\u002Fem\u003E,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供\u003Cem\u003E控件\u003C\u002Fem\u003E级别的EnableAjax属性。\n\t\t-整理支持Ajax的\u003Cem\u003E控件\u003C\u002Fem\u003E属性\u003Cem\u003E改变\u003C\u002Fem\u003E列表(所有被支持的属性\u003Cem\u003E改变\u003C\u002Fem\u003E都是安全的、快速的,所有不被支持的属性\u003Cem\u003E改变\u003C\u002Fem\u003E不会对UI起作用,同\u003Cem\u003E时\u003C\u002Fem\u003E是安全的,不会有js错误)。\n\t-网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed]\n\t\n\t\n\t\n+2008-08-29 v1.1 beta1\n\t+Window\u003Cem\u003E控件\u003C\u002Fem\u003E是否弹出的状态在回发\u003Cem\u003E时\u003C\u002Fem\u003E维持。[fixed]\n\t\t-\u003Cem\u003E控件\u003C\u002Fem\u003E设计的一个原则,凡是可以在客户端\u003Cem\u003E改变\u003C\u002Fem\u003E的属性都应该在回发\u003Cem\u003E时\u003C\u002Fem\u003E保持属性的状态。\n\t+完全抛弃Asp.NetAjax,ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E内置Ajax支持。[fixed]\n\t\t-这是一个\u003Cem\u003E值\u003C\u002Fem\u003E得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。\n\t\t-不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。\n\t\t+在这种设计下,其实可以完全抛弃Javascript。\n\t\t\t-比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。\n\t\t\t-第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。\n\t\t\t-推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。\n\t\t+目前ExtAspNetAjax的限制。\n\t\t\t-只对ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E起作用,对Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E不起作用。\n\t\t\t-对容器\u003Cem\u003E控件\u003C\u002Fem\u003E(有子\u003Cem\u003E控件\u003C\u002Fem\u003E的\u003Cem\u003E控件\u003C\u002Fem\u003E)不起作用,只对最底层的\u003Cem\u003E控件\u003C\u002Fem\u003E起作用。\n\t\t\t-对\u003Cem\u003E改变\u003C\u002Fem\u003E\u003Cem\u003E控件\u003C\u002Fem\u003E的Visible属性会有错误。\n\t\t\t-Window\u003Cem\u003E控件\u003C\u002Fem\u003E的属性\u003Cem\u003E改变\u003C\u002Fem\u003E只有少数几个起作用(Popup,IFrameUrl)。\n\t-PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t-Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed]\n\t-Grid选中行的状态在第一次回发\u003Cem\u003E时\u003C\u002Fem\u003E不能保持的BUG。[fixed]\n\t\n\t\n\t\n+2008-08-26 v1.0\n\t+已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。\n\t\t-主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能\u003Cem\u003E时\u003C\u002Fem\u003E要禁用此插件。\n\t+优化弹出窗口中IFrame的显示速度。[fixed]\n\t\t-在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建\u003Cem\u003E时\u003C\u002Fem\u003E间。\n\t-PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor=\"#CADDF7\",以便分隔符的颜色和Toolbar的颜色一致)[fixed]\n\t+PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed]\n\t\t-一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的\u003Cem\u003E值\u003C\u002Fem\u003E)(示例在default.aspx)。\n\t-TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed]\n\t+TabStrip中非当前Tab会延迟渲染。[fixed]\n\t\t-这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染\u003Cem\u003E时\u003C\u002Fem\u003E间。\n\t\t-由于非当前Tab不会在页面加载\u003Cem\u003E时\u003C\u002Fem\u003E渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到\u003Cem\u003E控件\u003C\u002Fem\u003E的render事件中。\n\t-不能比较两个DataPicker大小的BUG。[fixed]\n\t-TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed]\n\t-全新的ExtAspNet.Examples(基础知识\u002F表单\u003Cem\u003E控件\u003C\u002Fem\u003E\u002F数据绑定\u002F容器布局\u002FIFrame框架)。[fixed]\n\t\n\t\n\t\n+2008-08-19 v0.4 beta6\n\t+PageManager增加两个属性(EnableInlineStyleJavascript\u002FApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe\u002Fdefault.aspx和iframe\u002Fpage3.aspx)。[fixed]\n\t\t-测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。\n\t-RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed]\n\t+extjs的BUG,当页面中含有iframe\u003Cem\u003E时\u003C\u002Fem\u003E,Ext.onReady会被调用两次(IE6\u002FIE7)(http:\u002F\u002Fwww.extjs.net\u002Fforum\u002Fshowthread.php?t=43246)(示例在test.aspx)[fixed]\n\t\t-现在的解决方法是在初始化\u003Cem\u003E时\u003C\u002Fem\u003E:if(this.initialized){return;}this.initialized=true;\n\t+需要先回发页面再弹出IFrame窗口。[fixed]\n\t\t-在回发\u003Cem\u003E时\u003C\u002Fem\u003E设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口\u003Cem\u003E时\u003C\u002Fem\u003E要注意设置Popup=false。\n\t\t-另一种做法(推荐):PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterStartupScript(Window99.GetShowReference(\".\u002Fsimpleform.aspx\"));。\n\t\n\t\t\n\t\n+2008-08-15 v0.4 beta5\n\t-点击关闭窗口的按钮,在IE6下会有JS错误。[fixed]\n\t-增加BorderLayout\u003Cem\u003E控件\u003C\u002Fem\u003E,示例在iframe\u002Fborderlayout.aspx。[fixed]\n\t+Radiobutton\u003Cem\u003Elist\u003C\u002Fem\u003E显示有重影(示例在radio.aspx)。[fixed]\n\t\t-全新的样式。\n\t\t-去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。\n\t\t-GetValueReference取得的\u003Cem\u003E值\u003C\u002Fem\u003E不正确的BUG。\n\t-\u003Cem\u003E动态\u003C\u002Fem\u003E向Form中添加FormRow,并\u003Cem\u003E动态\u003C\u002Fem\u003E的向FormRow中添加表单字段,以及如何取得表单字段的\u003Cem\u003E值\u003C\u002Fem\u003E。(示例在form_dynamic.aspx)[fixed]\n\t+IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed]\n\t\t-这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本\u003Cem\u003E改变\u003C\u002Fem\u003E的IFrameUrl会在回发\u003Cem\u003E时\u003C\u002Fem\u003E保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。\n\t\t-现在\"是否弹出窗口、窗口标题、IFrameUrl\"在客户端的\u003Cem\u003E改变\u003C\u002Fem\u003E,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx)\n\t\n\t\n\t\n+2008-08-13 v0.4 beta4\n\t-点击关闭窗口的按钮,在IE下会有JS错误。[fixed]\n\t-Window的右上角关闭图标增加提示,优化事件响应。[fixed]\t\n\t-Window的代码重构。[fixed]\t\n\t+修正一个的内存泄漏。[fixed]\n\t\t-IE7下测试,打开iframe\u002Fdefault.aspx页面,iexplorer占内存68.368M。\n\t\t-内存存在泄漏\u003Cem\u003E时\u003C\u002Fem\u003E,点击iframe\u002Fpage3.aspx页面8次后iexplorer占118.792M内存。\n\t\t-修正后,点击iframe\u002Fpage3.aspx页面8次后iexplorer占76.492M内存。\n\t\t-IE窗口最小化\u003Cem\u003E时\u003C\u002Fem\u003E,IE会自动进行垃圾回收。\n\t\n\t\n\t\n+2008-08-12 v0.4 beta3\n\t-底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed]\n\t-Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight=\"true\"解决)。[fixed]\n\t+页面正在加载的提示尽早的显示出来。[fixed]\n\t\t-首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。\n\t\t-加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。\n\t\n\t\n\t\n+2008-08-08 v0.4 beta2\n\t-TabStrip延\u003Cem\u003E时\u003C\u002Fem\u003E加载出错。[fixed]\n\t-Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为.\u002FFE_ApplyEditor.aspx或~\u002FPages_ExtAspNet\u002FFE_ApplyEditor.aspx。[fixed]\n\t-Window的WindowPosition=\"Center\"并且Target=\"_parent\",则会JS错误。[fixed]\n\t-实现网报首页下拉菜单和左侧菜单的导航功能。[fixed]\n\t-Window的创建在页面显示后进行,不计算在js渲染\u003Cem\u003E时\u003C\u002Fem\u003E间内。[fixed]\n\t-优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed]\n\t-button_iframe.aspx默认会加载form.aspx页面(Window\u003Cem\u003E控件\u003C\u002Fem\u003E的BUG)。[fixed]\n\t-Window中的保存并关闭按钮和Asp.netAjax冲突。[fixed]\n\t-优化关闭Window的js脚本,减少写到页面的js大小。[fixed]\n\t-加快“保存并关闭”按钮关闭窗口的速度,使用PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed]\n\t\n\t\n\t\n+2008-08-05 v0.4 beta1\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E去除Traditional属性,和传统的Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E一样不可编辑。[fixed]\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E增加Selected\u003Cem\u003EText\u003C\u002Fem\u003E属性(去除了模拟树\u003Cem\u003E时\u003C\u002Fem\u003E通过\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E的多余html字符)。[fixed]\n\t-为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed]\n\t-将\u003Cem\u003E生成\u003C\u002Fem\u003E的js对象的名称简单化,这样可以减少\u003Cem\u003E生成\u003C\u002Fem\u003E的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。[fixed]\n\t+弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed]\n\t\t-因为在页面的Page_Load中,if (!IsPostBack){PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发\u003Cem\u003E时\u003C\u002Fem\u003E没有注册到页面,因为js调用此脚本\u003Cem\u003E时\u003C\u002Fem\u003E报错。\n\t\t-一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。\n\t\t-另一种办法就是在PageManager\u003Cem\u003E控件\u003C\u002Fem\u003E中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容\u003Cem\u003E改变\u003C\u002Fem\u003E的脚本)的属性(会在每次页面回发(包含ajax回发)\u003Cem\u003E时\u003C\u002Fem\u003E注册脚本)(示例在button_iframe.aspx\u002Fsimpleform.aspx)。\n\t+PageManager\u003Cem\u003E控件\u003C\u002Fem\u003E增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed]\n\t\t-这个手工添加onReady函数能够在每次页面回发\u003Cem\u003E时\u003C\u002Fem\u003E都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。\n\t-每个页面必须添加一个PageManager\u003Cem\u003E控件\u003C\u002Fem\u003E,否则会出错,同\u003Cem\u003E时\u003C\u002Fem\u003E去除DesignTimeStyle\u003Cem\u003E控件\u003C\u002Fem\u003E(作为PageManager的属性出现)。[fixed]\n\t-\u003Cem\u003EText\u003C\u002Fem\u003EField等表单字段增加Readonly属性。[fixed]\n\t+全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。[fixed]\n\t\t-最大的好处是可以减少页面下载完毕后Javascript渲染\u003Cem\u003E时\u003C\u002Fem\u003E间(可以节约一般的渲染\u003Cem\u003E时\u003C\u002Fem\u003E间)。(所有示例在iframe文件夹下)\n\t\t+示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx\u002Fpage2.aspx\u002Fsimpleform.aspx)\n\t\t\t-虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window\u003Cem\u003E控件\u003C\u002Fem\u003E增加一个属性(Target=\"_parent\"),就完成了两种框架的转换,是不是很酷。\n\t\t\t-显然,\u003Cem\u003E控件\u003C\u002Fem\u003E本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)\u002Fpage2.aspx(B)\u002Fsimpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口\u003Cem\u003E时\u003C\u002Fem\u003E,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B\u003Cem\u003E时\u003C\u002Fem\u003E,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。\n\t\t-示例2,Grid中弹出窗口。(default.aspx\u002Fpage3.aspx\u002Fsimpleform.aspx)\t\n\t\t+示例3,TriggerBox弹出窗口。(default.aspx\u002Ftriggerbox.aspx\u002Fsimpleform.aspx)\t\n\t\t\t-在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。\n\t\t-示例4,弹出窗口中的弹出窗口。\n\t-对整个Examples更新测试。[fixed]\n\t\n\t\n\t\n+2008-07-31 v0.3 beta12\n\t-IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed]\n\t-对TabStrip\u002FPanel\u002FWindow中的IFrame重新设计,如果设置IFrameUrl=\"#\"或者\"about:blank\",则不渲染iframe到页面节点,同\u003Cem\u003E时\u003C\u002Fem\u003E第二次打开Window中的IFrame不会有残影出现。[fixed]\n\t-如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed]\n\t-Tree\u003Cem\u003E控件\u003C\u002Fem\u003E,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed]\n\t+规范关闭窗口\u003Cem\u003E时\u003C\u002Fem\u003E提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx\u002Fsimpleform.aspx)。[fixed]\n\t\t-内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。\n\t-参照Yslow的评分规则,将JS文件引用由head移动到body中。[fixed]\n\t-Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed]\n\t+IFrame内的页面宽度和高度会自动设置(是不是还在为1px\u002F2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx\u002Fsimpleform.aspx\u002Fsimpleform2.aspx)[fixed]\n\t\t-增加PageManager\u003Cem\u003E控件\u003C\u002Fem\u003E(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE\u002FFirefox)。\n\t\n\t\n\t\n+2008-07-24 v0.3 beta11\n\t-web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同\u003Cem\u003E时\u003C\u002Fem\u003E每个表单字段都增加OffsetRight属性 [feedback:jima]。[fixed]\n\t-Window在回发\u003Cem\u003E时\u003C\u002Fem\u003E设置的Title不起作用的BUG。[fixed]\n\t-增加Image\u003Cem\u003E控件\u003C\u002Fem\u003E [feedback:jima]。[fixed]\n\t-Tree\u003Cem\u003E控件\u003C\u002Fem\u003E,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed]\n\t-Image增加ToolTipTitle\u002FToolTipAutoHide两个属性,当提示信息特别长\u003Cem\u003E时\u003C\u002Fem\u003E,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed]\n\t-去掉\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E\u003Cem\u003E控件\u003C\u002Fem\u003E的\u003Cem\u003EText\u003C\u002Fem\u003E属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed]\n\t-过滤提示消息中的换行符(转换为\u003Cbr\u002F\u003E),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed]\n\t\n\t\n\t\n+2008-07-23 v0.3 beta10\n\t+完善Tree\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\t-如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。\n\t\t-ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。\n\t\t-更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。\n\t-Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码![fixed]\n\t-Grid所有类型的列增加DataTooltipField\u002FDataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-22 v0.3 beta9\n\t+IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed]\n\t\t-发现原来ie6不能正确解析li的高度,必须手工设置才行(style=\"height:20px;\")。\n\t+IE6\u002FIE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed]\n\t\t-虽然最后未能解决\u003Cdiv style=\"width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;\"\u003E\u003Cdiv style=\"width: 16px; height: 18px; float: left;\"\u003E##\u003C\u002Fdiv\u003E差旅交通费\u003C\u002Fdiv\u003E在IE和Firefox下显示的不同效果。\n\t\t-但是通过用\u003Cimg src=\"##\" \u002F\u003E来代替\u003Cdiv style=\"background:url(##)\" \u002F\u003E,从而实现FF和IE下样式的统一。\n\t\t-刚看到old9的解决方案:把“差旅交通费”改成“\u003Cspan style=\"margin-right: -1000px;\"\u003E差旅交通费\u003C\u002Fspan\u003E”,在IE下和FF下的都不换行,:-)\n\t-LinkButton增加OnClick事件 [feedback:huihuang]。[fixed]\n\t-Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed]\n\t+增加树\u003Cem\u003E控件\u003C\u002Fem\u003E(Tree)(示例在tree2.aspx)。[fixed]\n\t\t-可以在回发\u003Cem\u003E时\u003C\u002Fem\u003E维持树的状态(选中行,折叠\u002F展开,CheckBox)。\n\t\t-可以通过Inline的方式添加树节点,也可以绑定到XmlDocument\u002FXmlDataSource\u002FSiteMap。\n\t\t-点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。\n\t\n\t\n\t\n+2008-07-16 v0.3 beta8\n\t+ContentPanel中放置ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E,则渲染\u003Cem\u003E时\u003C\u002Fem\u003E会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed]\n\t\t-隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E,如果容器的display='none',则会出现各种问题(主要是大小不对)。\n\t\t 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。\n\t\t-现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。\n\t+IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。[fixed]\n\t\t-调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。\n\t\t-最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG:\n\t\t 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();):\n\t\t 示例在 Site.Master 页面。\n\t+集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当\u003Cem\u003E改变\u003C\u002Fem\u003E窗口大小\u003Cem\u003E时\u003C\u002Fem\u003E你会惊讶的发现内容区域的内容全部为空了![fixed]\n\t\t-解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();),\n\t\t 这样的代码让我想起刷新窗口\u003Cem\u003E时\u003C\u002Fem\u003E那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。\n\t\n\t\n\t\n+2008-07-14 v0.3 beta6\n\t-增加FlashObject\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t-PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed]\n\t-Accordion选中样式微调。[fixed]\n\t-预加载Form表单出错\u003Cem\u003E时\u003C\u002Fem\u003E提示信息的背景图片。[fixed]\n\t+Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed]\n\t\t-因为延迟加载数据不会\u003Cem\u003E改变\u003C\u002Fem\u003EGrid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置\"EnableDelayRender=false\"。\n\t-\u003Cem\u003E改变\u003C\u002Fem\u003EGrid中静态的CheckBoxField图片。[fixed]\n\t-TabStrip增加TabIndexChanged事件,同\u003Cem\u003E时\u003C\u002Fem\u003ETab增加EnablePostBack,可以在点击一个Tab\u003Cem\u003E时\u003C\u002Fem\u003E引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed]\n\t\n\t\n\t\n+2008-07-12 v0.3 beta5\n\t-页面菜单Toolbar的分割符和背景不相融合。[fixed]\n\t-表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同\u003Cem\u003E时\u003C\u002Fem\u003E增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed]\n\t\t-如果是同种类型的表单字段,不需要指定CompareType,比如两个NumberBox比较\u003Cem\u003E值\u003C\u002Fem\u003E的大小不需要指定CompareType,而一个NumberBox和\u003Cem\u003EText\u003C\u002Fem\u003EBox比较大小需要指定CompareType。\n\t+如果在编辑页面使用AspNetAjax,则不能在回发\u003Cem\u003E时\u003C\u002Fem\u003E关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx\u002Fajax_editor.aspx)。[fixed]\n\t\t-这是由于ajax后执行的javascript中不能有return false语句。\n\t+在文本框失去焦点\u003Cem\u003E时\u003C\u002Fem\u003E,执行一些Javascript脚本(示例在\u003Cem\u003Etext\u003C\u002Fem\u003Ebox_blur.aspx) [feedback:xmzhu]。[fixed]\n\t\t-在页面添加onReady函数(会被系统调用),然后用javascript监视文本框\u003Cem\u003E值\u003C\u002Fem\u003E的\u003Cem\u003E改变\u003C\u002Fem\u003E。\n\t-弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window\u003Cem\u003E控件\u003C\u002Fem\u003E的IFrameUrl指向这个页面而不是\"#\"。[fixed]\n\t+弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮\u003Cem\u003E时\u003C\u002Fem\u003E会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed]\n\t\t-原来的调用方法太麻烦(见示例中alert\\alert_1.aspx和alert\\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。\n\t-点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed]\n\t+增加Menu、Menu\u003Cem\u003EText\u003C\u002Fem\u003E、MenuSeparator、MenuButton、MenuHyperLink\u003Cem\u003E控件\u003C\u002Fem\u003E,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed]\n\t-增加SplitButton\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\n\t\n\t\n+2008-07-09 v0.3 beta4\n\t-DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed]\n\t+Form表单字段(\u003Cem\u003EText\u003C\u002Fem\u003EBox,\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E...)之间可以比较大小 [feedback:huihuang]。[fixed]\n\t\t-增加ControlToCompare\u002FValueToCompare\u002FCompareOperator\u002FCompareMessage四个属性,示例在form_compare.aspx。\n\t+TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed]\n\t\t-特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活\u003Cem\u003E时\u003C\u002Fem\u003E才设置Url。\n\t-RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed]\n\t-FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed]\n\t+表单字段Enable=false\u003Cem\u003E时\u003C\u002Fem\u003E显示颜色太浅 [feedback:jima]。[fixed]\n\t\t-覆盖缺省样式的.x-item-disabled,设置不透明。\n\t\n\t\n\t\n+2008-07-08 v0.3 beta3\n\t-Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed]\n\t+增加HiddenField\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\t-其实用\u003Cem\u003EText\u003C\u002Fem\u003EBox也能模拟HiddenField的行为,只需要设置CssStyle=\"display:none;\"即可。\n\t+TriggerBox 如果 Enable\u003Cem\u003EText\u003C\u002Fem\u003EBox = true,则不能将\u003Cem\u003EText\u003C\u002Fem\u003E回发(这是html的限制)。[fixed]\n\t\t-最后的解决方案居然是设置 readonly=true,同\u003Cem\u003E时\u003C\u002Fem\u003E更改属性为 Readonly(示例在\u003Cem\u003Etext\u003C\u002Fem\u003Ebox2.aspx)。\n\t-模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed]\n\t+控制下拉列表某些项不可以\u003Cem\u003E选择\u003C\u002Fem\u003E(示例在\u003Cem\u003Edropdown\u003C\u002Fem\u003E\u003Cem\u003Elist\u003C\u002Fem\u003E2.aspx)。[fixed]\n\t\t-增加 DataEnableSelectField 属性,不可\u003Cem\u003E选择\u003C\u002Fem\u003E的项变灰,并且鼠标经过\u003Cem\u003E时\u003C\u002Fem\u003E没有样式。\n\t-LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-07 v0.3 beta2\n\t+增加UpdatePanelConnector\u003Cem\u003E控件\u003C\u002Fem\u003E,支持在布局构建的页面使用Asp.net Ajax。[fixed]\n\t\t-使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。\n\t\t-示例在ajax3.aspx\u002Fcontent_page4.aspx。\n\t\t-示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。\n\t \n\t \n\t\n+2008-07-03 v0.3 beta1\n\t+容器\u003Cem\u003E控件\u003C\u002Fem\u003E的AutoHeight\u002FAutoWidth默认为false。[fixed]\n\t\t-使用GroupPanel的地方需要手工添加AutoHeight=\"true\"属性。\n\t+增加UserControlConnector,可以在其中放置用户\u003Cem\u003E控件\u003C\u002Fem\u003E(示例在page_usercontrol.aspx)。[fixed]\n\t\t-也可以在ContentPanel中放置用户\u003Cem\u003E控件\u003C\u002Fem\u003E,注意两者的区别。\n\t+增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed]\n\t+支持Asp.net ajax异步加载。[fixed]\n\t\t-有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx\u002Fcontent_ajax2.aspx中。\n\t\t-对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。\n\t\n\t\n\t\n+2008-07-02 v0.2 beta12\n\t+关闭前提示当前页面已经被修改(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-支持Iframe内按钮和window右上角关闭按钮。\n\t\t-删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。\n\t+iframe中的alert\u002Fconfirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed]\n\t\t-在Firefox下还有问题。[fix pending]\n\t+排序\u003Cem\u003E时\u003C\u002Fem\u003E在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed]\n\t\t-可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。\n\t\t-可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。\n\t+HyperLinkField\u002FWindowField的链接地址支持服务器端格式(即是~\u002Falert.aspx)。[fixed]\n\t-TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed]\n\t-可以在ContentPanel中放置用户\u003Cem\u003E控件\u003C\u002Fem\u003E(示例在page_usercontrol.aspx)。[fixed]\n\t\t\n\t\n\t\n+2008-06-30 v0.2 beta11\n\t-增加TwinTriggerBox\u003Cem\u003E控件\u003C\u002Fem\u003E(示例在twintriggerbox.aspx)。[fixed]\n\t-Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录\u003Cem\u003E时\u003C\u002Fem\u003E总记录数不会变化 [feedback:zgjiang2]。[fixed]\n\t-关闭Window\u003Cem\u003E时\u003C\u002Fem\u003EPostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed]\n\t-如果表单验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。[fixed]\n\t+页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-目前还不支持Window右上角关闭按钮的提示保存功能。\n\t-Master\u002FContent的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed]\n\t-Grid中的LinkButtonField设置Confirm\u003Cem\u003EText\u003C\u002Fem\u003E会出错 [feedback:huihuang]。[fixed]\n\t-增加静态类Confirm。[fixed]\n\t\n\t\n\t\n+2008-06-27 v0.2 beta10\n\t+Grid完善。[fixed]\n\t\t-CheckBoxField在回发\u003Cem\u003E时\u003C\u002Fem\u003E不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。\n\t\t-Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示\u003Cem\u003E时\u003C\u002Fem\u003E的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。\n\t\t-切换分页\u003Cem\u003E时\u003C\u002Fem\u003E清空选中的\u003Cem\u003E值\u003C\u002Fem\u003E [feedback:jqpeng]。\n\t\t-增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在\u003Cem\u003Edropdown\u003C\u002Fem\u003E\u003Cem\u003Elist\u003C\u002Fem\u003E_simulate_tree.aspx)。\n\t\n\t\n\t\n+2008-06-25 v0.2 beta9\n\t+Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。\n\t+关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading\u003Cem\u003E控件\u003C\u002Fem\u003E,这样效果统一。[fixed]\n\t+Grid完善。\n\t\t-去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在ASP.NET应用中会有很多问题(主要是状态保持的问题)。\n\t\t+EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx)\n\t\t\t-使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函数中重新绑定数据。\n\t\t+增加AllowPaging属性。(示例在grid_paging.aspx)\n\t\t\t-使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函数中Grid1.PageIndex = e.NewPageIndex;OK。\n\t\t+数据库分页支持。(示例在grid_database_paging.aspx)\n\t\t\t-使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定\u003Cem\u003E时\u003C\u002Fem\u003E设置RecordCount为总的记录数,在OnPageIndexChange事件处理函数中Grid1.PageIn","createTime":"2010-04-01 09:41:27","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-2190657-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-2190657-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"3\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fsuper_zhaowenke\u002F2190657\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-2190657-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"3\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fsuper_zhaowenke\u002F2190657\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-2190657-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fwode2600\u002F2726130","title":"ExtAspNet_v2.3.2_dll","desc":"ExtAspNet - ExtJS based ASP.NET Controls with Full AJAX Support\n\t\nExtAspNet是一组专业的Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E库,拥有原生的AJAX支持和丰富的UI效果,\n目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。\n\n支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+\n\n注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。\n\n示例: http:\u002F\u002Fextasp.net\u002F\n开源: http:\u002F\u002Fextaspnet.codeplex.com\u002F\n博客: http:\u002F\u002Fsanshi.cnblogs.com\u002F\n邮箱: sanshi.ustc@gmail.com\n\n\n发布历史:\n\n+2010-09-29 v2.3.2\n\t-不绑定任何数据到Grid\u003Cem\u003E时\u003C\u002Fem\u003E,确保页面不会出错。\n\t-修正了Grid列属性DataFormatString的一个bug,比如设置{0:yy-MM-dd HH:mm}\u003Cem\u003E时\u003C\u002Fem\u003E没有效果。\n\t-修正下拉列表\u003Cem\u003E控件\u003C\u002Fem\u003E不能绑定DataTable的BUG(feedback:RedOcean)。\n\t-增加土耳其语言资料文件(feedback:abdullaharslan)。\n\t-Grid的BoundField增加NullDisplay\u003Cem\u003EText\u003C\u002Fem\u003E属性,用于处理数据库中的null\u003Cem\u003E值\u003C\u002Fem\u003E,如果没有设置则默认为空字符串。\n\t-修正DatePicker中的一个bug(31\u002F01\u002F2010将会返回NULL)使用DateFormatString来\u003Cem\u003E生成\u003C\u002Fem\u003ESelectedDate属性(feedback:OktaEndy)。\n\t-修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的\u003Cem\u003EText\u003C\u002Fem\u003E,则SelectedValue返回\u003Cem\u003E值\u003C\u002Fem\u003E永远是第一个\u003Cem\u003EText\u003C\u002Fem\u003E的\u003Cem\u003E值\u003C\u002Fem\u003E(feedback:ben.zhou)。\n\t-应用补丁#6593, #6621(feedback:vbelyaev)。\n\t+修正IE7下Grid分页速度慢(feedback:youwei, StevenGuan, hazardvn, gavindou, ttjacky)。\n\t\t-实际上IE7下所以的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。\n\t-俄语翻译(feedback:vbelyaev)。\n\t\n\t\n\n+2010-06-30 v2.3.1\n\t-ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E将不在依赖ViewState,减少1\u002F4左右的HTTP数据传输量。\n\t-\u003Cem\u003E控件\u003C\u002Fem\u003E和示例的增强。\n\t\n\t\n\n+2010-03-28 v2.2.1\n\t+为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 \n\t\t-修正此函数通过PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterStartupScript调用\u003Cem\u003E时\u003C\u002Fem\u003E不能正确显示Icon的BUG(feedback:zhaowenke)。\n\t-修正basic\u002Fhello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。\n\t-隐藏示例首页最外层RegionPanel的边框ShowBorder=\"false\"。\n\t+集成Extjs最新版本v3.1.1。\n\t\t-增加一个新的Theme - Access。\n\t\t-修正了Firefox下Zoom In\u002FOut\u003Cem\u003E时\u003C\u002Fem\u003E页面消失的BUG。\n\t\t-删除Panel的EnableLightBackgroundColor属性,同\u003Cem\u003E时\u003C\u002Fem\u003EEnableBackgroundColor只支持Blue和Gray两种Theme。\n\n\n\n+2010-01-31 v2.2.0\n\t-使得Asp.net的\u003Cem\u003E控件\u003C\u002Fem\u003EImageButton具有和Asp.net的Button\u003Cem\u003E控件\u003C\u002Fem\u003E类似的行为(Ajax提交)(feedback:261629698)。\n\t+TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip\u003Cem\u003E控件\u003C\u002Fem\u003E\u003Cem\u003E动态\u003C\u002Fem\u003E增加删除Tab。\n\t\t-增加示例tabstrip\u002Ftabstrip_addtab.aspx。\n\t-重构了示例网站的架构,目前只有一层IFrame结构。\n\t-为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。\n\t-为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal=\"false\")(feedback:zqmars)。\n\t-Window\u003Cem\u003E控件\u003C\u002Fem\u003E更新。\n\t\t-关闭按钮默认直接关闭,不会弹出确认对话框。\n\t\t-GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。\n\t\t-增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。\n\t\t-修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。\n\t-删除Button\u003Cem\u003E控件\u003C\u002Fem\u003E的SystemIcon属性,比如以前这样定义SystemIcon=\"Close\",现在需要这样定义Icon=\"SystemClose\"。\n\t-WindowPosition默认居中,而不是黄金分割位置。\n\t+Button, Window等\u003Cem\u003E控件\u003C\u002Fem\u003E弹出位置属性的变化。\n\t\t-Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target=\"_self\" -\u003E Target=\"Self\", Target=\"_parent\" -\u003E Target=\"Parent\"。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举\u003Cem\u003E值\u003C\u002Fem\u003ESelf, Parent, Top。\n\t\t-Confirm.GetShowReference的最后一个参数target变为枚举类型。\n\t\t-Alert.GetShowReference中的showInParent参数也变为Target枚举类型。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败\u003Cem\u003E时\u003C\u002Fem\u003E提示对话框的显示位置。\n\n\n\n+2010-01-06 v2.1.9\n\t-集成Extjs最新版本v3.1.0。\n\t-修正灰色皮肤的CSS问题。\n\t-修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。\n\t-为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。\n\t-修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。\n\t-Button\u003Cem\u003E控件\u003C\u002Fem\u003E将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=\"float:left;\"属性。\n\t-修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。\n\t-为TriggerBox和TwinTriggerBox增加EnableEdit属性。\n\t-使用Hidden来显示隐藏ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E,而不是使用Visible属性(Visible目前设置为只读属性)。\n\t-使用Hidden控制Window\u003Cem\u003E控件\u003C\u002Fem\u003E的显示隐藏,Popup已经标记为Obsolete属性。\n\t-Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。\n\t-增加TabStrip中Tab\u003Cem\u003E控件\u003C\u002Fem\u003E可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。\n\t-修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。\n\t-修正HtmlEditor不能编辑的BUG(feedback:TheBox)。\n\t-修正IE下有\u003Cem\u003E时\u003C\u002Fem\u003E会出现空白页面的情况(feedback:olivia919)。\n\t\n\t\n\n+2009-12-06 v2.1.8\n\t-修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。\n\t-修正了IE下Grid中的一个JS问题(feedback:lqm4108)。\n\t-修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。\n\t+集成extjs3.0.3。\n\t\t-修正弹出对话框的宽度计算错误(会保持最小的状态)。\n\t\t-增加新的皮肤Gray。\n\t-为示例工程添加\u003Cem\u003E改变\u003C\u002Fem\u003E语言和皮肤的下拉列表。\n\t-为PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E增加静态函数Refresh,在切换语言和皮肤\u003Cem\u003E时\u003C\u002Fem\u003E使用。\t\n\n\n\n+2009-12-01 v2.1.7\n\t-增加示例(iframe\u002Fparent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。\n\t-修正一些书写错误(feedback:bmck)。\n\t-从Region\u003Cem\u003E控件\u003C\u002Fem\u003E中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。\n\t-BorderPanel更名为RegionPanel。\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E拥有MarkInvalid方法(feedback:sun1299shine)。\n\t-增加中国的省市县三级联动示例(data\u002Fshengshixian.aspx)(feedback:Blues T)。\n\t-修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。\n\t-修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。\n\t\n\t\n\t\n+2009-11-26 v2.1.6\n\t+修正\u003Cem\u003E动态\u003C\u002Fem\u003E创建Grid列的BUG(feedback:gxpan)。\n\t\t-增加示例(data\u002Fgrid_dynamic_columns.aspx)。\n\t-修正Form不能自适应浏览器大小的\u003Cem\u003E改变\u003C\u002Fem\u003E(feedback:kaywood)(WorkItem#6309)。\n\t-增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。\n\t-为容器\u003Cem\u003E控件\u003C\u002Fem\u003E(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。\n\t-重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。\n\t\t\t\n\n\n+2009-11-21 v2.1.5\n\t+Tree优化。\n\t\t-修正Expanded项和Checked项的状态在回发\u003Cem\u003E改变\u003C\u002Fem\u003E后不能保持的BUG。\n\t\t-GetNodeById更名为FindNode,保持和FindControl一致命名。\n\t\t-删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。\n\t\t-删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。\n\t\t-增加示例(data\u002Ftree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。\n\t\t+TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。\n\t\t\t-同\u003Cem\u003E时\u003C\u002Fem\u003E更名的还有GridColumn的ColumnId-\u003EColumnID,GetColumnId-\u003EGetColumnID。\n\t\t\t-Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。\n\t\t-为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。\n\t-为所有\u003Cem\u003E控件\u003C\u002Fem\u003E增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。\n\t-增加示例(other\u002Fcustom_postback.aspx)(feedback:thebox)。\n\t\t-如何自定义Javascript脚本和C#处理函数来响应键盘事件。\n\t-为Tree增加AutoLeafIdentification属性。\n\t\t-增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。\n\t\n\t\n\n+2009-11-17 v2.1.4\n\t-修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。\n\t-部分ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E的设计\u003Cem\u003E时\u003C\u002Fem\u003E支持(会在后续版本中逐步完善)。\n\t-v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计\u003Cem\u003E时\u003C\u002Fem\u003E属性,和运行\u003Cem\u003E时\u003C\u002Fem\u003E是否保持状态没有关系。\n\t-修正CheckBox\u003Cem\u003E控件\u003C\u002Fem\u003E的CheckedChanged事件会被触发两次的BUG(Data PostBack-\u003EAutoPostBack, Event PostBack-\u003EEnablePostBack)。\n\t-为\u003Cem\u003EText\u003C\u002Fem\u003EBox,\u003Cem\u003EText\u003C\u002Fem\u003EArea,DatePicker,NumberBox,TriggerBox等\u003Cem\u003E控件\u003C\u002Fem\u003E增加AutoPostBack属性(feedback:dk3214)。\n\t+为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败\u003Cem\u003E时\u003C\u002Fem\u003E提示信息。\n\t\t-为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。\n\t+为表单字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。\n\t\t-增加示例:form\u002Fform_validate.aspx\n\t\n\t\n\n+2009-10-19 v2.1.3\n\t+增加支持在AJAX\u003Cem\u003E时\u003C\u002Fem\u003E\u003Cem\u003E改变\u003C\u002Fem\u003E的\u003Cem\u003E控件\u003C\u002Fem\u003E属性列表(\u002Fajax.aspx)。\n\t\t-ExtAspNet支持原生的AJAX,也就是说\u003Cem\u003E控件\u003C\u002Fem\u003E的属性\u003Cem\u003E改变\u003C\u002Fem\u003E在AJAX过程中会反映到页面中,但并不是所有的\u003Cem\u003E控件\u003C\u002Fem\u003E属性都支持AJAX\u003Cem\u003E改变\u003C\u002Fem\u003E。\n\t-加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)。\n\t-在AJAX回发后确保Asp.net的按钮\u003Cem\u003E控件\u003C\u002Fem\u003E仍然具有AJAX的特性。\n\t-更新\u002Fbasic\u002Flogin.aspx示例,使用验证图片(feedback:kedee)。\n\t-为Grid增加AutoPostBack属性和RowClick事件,示例在\u002Fdata\u002Fgrid_autopostback.aspx(feedback:chenguizhu2006)。\n\t-为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。\n\t-Grid中TemplateField\u003Cem\u003E生成\u003C\u002Fem\u003E到页面中\u003Cem\u003E控件\u003C\u002Fem\u003E具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。\n\t\n\t\n\n+2009-09-27 v2.1.2\n\t-为Tree\u003Cem\u003E控件\u003C\u002Fem\u003E增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。\n\t-修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。\n\t-增加pt_BR语言,由Ujvari提供。\n\t+为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。\n\t\t-如果Panel具有IconUrl属性,则IconUrl优先于Icon。\n\t\t-所有Icon的列表在icon.aspx。\n\t-为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的\u003Cem\u003E值\u003C\u002Fem\u003E)增加Icon属性。\n\t\n\t\n\n+2009-09-15 v2.1.1\n\t-修正不能\u003Cem\u003E动态\u003C\u002Fem\u003E修改AccordionPane属性Items的BUG。\n\t+为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。\n\t\t-如果需要在父页面弹出确认对话框,需要设置ConfirmTarget=\"_parent\"(类似Window\u003Cem\u003E控件\u003C\u002Fem\u003E的Target=\"_parent\")。\n\t+为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。\n\t\t-一个典型应用,在Window\u003Cem\u003E控件\u003C\u002Fem\u003E中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。\n\t\t-ExtAspNet.Alert.Show(\"参数错误!\", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());\n\t+TreeNode的前面的多选框可以自动回发了。\n\t\t-为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。\n\t\t-示例在:http:\u002F\u002Fextasp.net\u002Fdata\u002Ftree_run.aspx\n\t-Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项\u003Cem\u003E时\u003C\u002Fem\u003E在父页面弹出对话框的JS代码。\n\t-修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。\n\t-添加定\u003Cem\u003E时\u003C\u002Fem\u003E器\u003Cem\u003E控件\u003C\u002Fem\u003ETimer,用来定\u003Cem\u003E时\u003C\u002Fem\u003E发起AJAX请求。\n\t\n\t\n\n+2009-09-06 v2.1.0\n\t-Button的Pressed属性\u003Cem\u003E值\u003C\u002Fem\u003E能够正确的反映客户端的变化。\n\t-优化Tree\u003Cem\u003E控件\u003C\u002Fem\u003E的AJAX实现。\n\t+为页面的Form添加autocomplete=\"off\"属性。\n\t\t-参考http:\u002F\u002Fwww.cnblogs.com\u002Fsanshi\u002Farchive\u002F2009\u002F09\u002F04\u002F1560146.html#1635830\n\t+添加对extjs3.0中所有语言的支持。\n\t\t-ExtAspNet扩展的多语言包在js\\languages\\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现\n\t\t-你可以向其中添加自己的语言版本,并执行js\\languages下的pack.bat打包,最后编译工程。\n\t\n\t\n\t\n+2009-09-01 v2.0.9\n\t-为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。\n\t+在aspx页面中必须显示的声明\u003Cem\u003E控件\u003C\u002Fem\u003E的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。\n\t\t-这将会影响所有的aspx页面,所以要特别关注。\n\t-重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称).\n\t+所有的面板默认有两个集合属性(Toolbars和Items).\n\t\t-尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此\u003Cem\u003E时\u003C\u002Fem\u003EItems是只读的).\n\t\t-这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。\n\t-祝你生日快乐 - 小师妹妹。\n\n\n\n+2009-08-29 v2.0.8\n\t-ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。\n\t-将所有的示例转化为英语版本。\n\t-修正Tree\u003Cem\u003E控件\u003C\u002Fem\u003E的一个BUG(定义Mappings属性\u003Cem\u003E时\u003C\u002Fem\u003E)。\n\t+PageManager.Instance应该存在于HttpCon\u003Cem\u003Etext\u003C\u002Fem\u003E.Current,而不是一个全局变量。\n\t -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。\n\t+去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。\n\t -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。\n\t\n\t\n\n+2009-08-25 v2.0.7\n -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。\n -Grid的Values属性访问限制由internal改为public,这就意味这可以自由\u003Cem\u003E改变\u003C\u002Fem\u003EGrid中每个单元格的\u003Cem\u003E值\u003C\u002Fem\u003E了。\n -增加示例-如何将Grid\u003Cem\u003E控件\u003C\u002Fem\u003E导出为Excel(data\\grid_excel_run.aspx)(feedback:503684912)。\n -如果TreeNode的属性Enabled=\"false\",则此项变灰并且不会被选中(feedback:your568)。\n -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~\u002F开头)的BUG。\n -增加Accordion和Tree配合使用的示例(other\\accordion_tree_run.aspx)。\n -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。\n +去除PageLayout\u003Cem\u003E控件\u003C\u002Fem\u003E,此\u003Cem\u003E控件\u003C\u002Fem\u003E可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。\n\t\t-这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。\n\t\t-简单方便,示例可以参考 default.aspx 或者 other\\accordion_tree_run.aspx。\n \n \n\n+2009-08-14 v2.0.6\n\t-\u003Cem\u003E动态\u003C\u002Fem\u003E\u003Cem\u003E生成\u003C\u002Fem\u003E菜单实例(other\\menu_dynamic_run.aspx和other\\menu_dynamic2_run.aspx)(feedback:shguo)。\n\t-优化AJAX的内部实现,每个页面保存的ViewState现在减少1\u002F3左右(重要更新)。\n\t-优化Tree节点的NodeId自动\u003Cem\u003E生成\u003C\u002Fem\u003E,减少ViewState占用。\n\t\n\n\n+2009-08-09 v2.0 beta5\n\t+ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。\n\t\t-在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior=\"false\"\n\t\t--也就是说\u003Cem\u003E生成\u003C\u002Fem\u003E的input的type不能是\"submit\",而这个限制在有些情况下是不可原谅的。\n\t\t--我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。\n\t+PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E了。\n\t\t-在Page_Load中设置了哪些需要在AJAX中更新的Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E会在回发\u003Cem\u003E时\u003C\u002Fem\u003E保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的\u003Cem\u003E控件\u003C\u002Fem\u003E。\n\t\t-示例在aspnet\\fckeditor_run.aspx和aspnet\\aspnet_run.aspx。\n\t\t-FCKEditor和上传\u003Cem\u003E控件\u003C\u002Fem\u003E兼容。示例在aspnet\\fileupload_run.aspx。\n\t-修正Toolbar\u003Cem\u003EText\u003C\u002Fem\u003E的文本在AJAX下更新的BUG。\n\t-Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。\n\t-更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。\n\t\n\n\n+2009-08-02 v2.0 beta4\n\t+和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。\n\t\t-采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。\n\t\t-现在支持Response.Redirect,你可以\u003Cem\u003E选择\u003C\u002Fem\u003EResponse.Redirect或者ExtAspNet.PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.Redirect重定向页面,两者效果一样。\n\t\t-支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。\n\t-Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。\n\t-修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。\n\t-修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。\n\t-增加Menu和Accordion的示例。\n\t-修正Window\u003Cem\u003E控件\u003C\u002Fem\u003E的IconUrl有\u003Cem\u003E时\u003C\u002Fem\u003E不显示(Target=\"_parent\")的BUG[feedback:xmq&mgzhenhong]。\n\t\n\n\n+2009-07-22 v2.0 beta3\n\t-兼容FCKEditor。\n\t-在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。\n\t\n\n\n+2009-07-13 v2.0 beta2\n\t-集成extjs最新版本v3.0。\n\t+兼容IE6.0-7.0-8.0。\n\t\t-这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。\n\t\t-目前先禁用IE6.0-7.0的QuickTips。\n\t-优化底层JavaScript。\n\t\n\t\n\t\n+2009-07-05 v2.0 beta1\n\t-更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。\n\t-使用YUI Compressor压缩JavaScript和CSS文件。\n\t-Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。\n\t-ExtAspNet自身的CSS会紧挨着页面标签引入,这样在中自定义的样式可以覆盖ExtAspNet缺省样式。\n\t+Alert对话框会遮挡所有的Window窗口。\n\t\t-使用一个变通的方法解决,因为无法\u003Cem\u003E改变\u003C\u002Fem\u003EExt.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。\t\n\t-为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。\n\t-因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。\n\t-重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。\n\t-更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。\n\t-更新示例工程。\n\t\n\t\n\n+2009-03-25 v1.3.1\n\t-Tree在AJAX回发展开节点\u003Cem\u003E时\u003C\u002Fem\u003EJS错误[feedback:xlli]。[fixed]\n\t-Window中的EnableIFrame==false,则点击关闭按钮\u003Cem\u003E时\u003C\u002Fem\u003E报JS错误。[fixed]\n\t-页面包含FileUpload\u003Cem\u003E控件\u003C\u002Fem\u003E,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet\u002Ffileupload.aspx)[fixed]\n\t-HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。[fixed]\n\t\n\t\n\n+2009-03-03 v1.3.0\n\t-如果弹出的窗口(Ext-Window)含有ASP.NET\u003Cem\u003E控件\u003C\u002Fem\u003EFileUpload,则此弹出窗口在关闭\u003Cem\u003E时\u003C\u002Fem\u003E出现JS错误(http:\u002F\u002Fextjs.com\u002Fforum\u002Fshowthread.php?t=8129)[feedback:xlli]。[fixed]\n\t-如果页面中存在ASP.NET\u003Cem\u003E控件\u003C\u002Fem\u003E(\u003Cem\u003EText\u003C\u002Fem\u003EBox),则第二次提交表单就会报错(视图状态不对,其实\u003Cem\u003E时\u003C\u002Fem\u003E没有更新EventValidation隐藏字段导致的问题)。[fixed]\n\t-页面上放置ExtAspNet-Button和ASP.NET-Button,则点击ExtAspNet-Button\u003Cem\u003E时\u003C\u002Fem\u003E激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。[fixed]\n\t-ExtAspNet内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。[added]\n\t+如果以前你听过不要在ExtAspNet工程中使用ASP.NET标准\u003Cem\u003E控件\u003C\u002Fem\u003E的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E和ASP.NET标准\u003Cem\u003E控件\u003C\u002Fem\u003E和平共处了。[fixed]\n\t\t-如果一个ASP.NET按钮\u003Cem\u003E控件\u003C\u002Fem\u003E要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior=\"false\" 即可。\n\t\t-如果要在一次ExtAspNet的原生AJAX回发\u003Cem\u003E时\u003C\u002Fem\u003E更新ASP.NET\u003Cem\u003E控件\u003C\u002Fem\u003E的\u003Cem\u003E值\u003C\u002Fem\u003E,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet\u002Faspnet.aspx)。\n\n\n\n+2009-02-27 v1.2 beta9\n\t-网络连接出错\u003Cem\u003E时\u003C\u002Fem\u003E的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed]\n\t-自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed]\n\t+系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed]\n\t\t-底层使用Javascript创建一个Window\u003Cem\u003E控件\u003C\u002Fem\u003E的代码由原来的2000字符减少为500个字符。\t\n\t\t-PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。\n\t\t---[updated]删除PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference\u002FGetConfirmFormModifiedCloseRefreshReference\u002FGetConfirmFormModifiedClosePostBackReference三个方法代替。\n\t\t-不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串\n\t\t-去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.GetFormModifiedConfirmReference获取此方法的客户端脚本。\n\t\t---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误!\n\t\t-A页面有Ext-Window\u003Cem\u003E控件\u003C\u002Fem\u003E弹出B页面,B页面有Ext-Window\u003Cem\u003E控件\u003C\u002Fem\u003E弹出C页面,B页面的Ext-Window\u003Cem\u003E控件\u003C\u002Fem\u003E设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。\n\t\t---当\u003Cem\u003E时\u003C\u002Fem\u003E如果用户直接访问B页面,就会报JS错误,因为此\u003Cem\u003E时\u003C\u002Fem\u003E找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。\n\t\t-Window\u003Cem\u003E控件\u003C\u002Fem\u003E的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单\u003Cem\u003E改变\u003C\u002Fem\u003E,然后关闭弹出窗口的客户端脚本”。\n\t\t---为Window\u003Cem\u003E控件\u003C\u002Fem\u003E增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单\u003Cem\u003E改变\u003C\u002Fem\u003E,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。\n\t\t---Window\u003Cem\u003E控件\u003C\u002Fem\u003E的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。\n\t\t---现在可以很方便的为Window\u003Cem\u003E控件\u003C\u002Fem\u003E的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。\n\t\t-如果弹出窗口(Window\u003Cem\u003E控件\u003C\u002Fem\u003E)中IFrame的页面不能正常加载(网络暂\u003Cem\u003E时\u003C\u002Fem\u003E出错或页面抛出异常),则此\u003Cem\u003E时\u003C\u002Fem\u003E点击右上角的关闭按钮会报JS错误,因为此\u003Cem\u003E时\u003C\u002Fem\u003E页面尚未加载完毕。\n\t\t---此版本修正了这个BUG,即\u003Cem\u003E时\u003C\u002Fem\u003E页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。\n\t\t-Window\u003Cem\u003E控件\u003C\u002Fem\u003E的IFrameName属性是自动\u003Cem\u003E生成\u003C\u002Fem\u003E的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。\n\t\t-CurrentActiveWindow改名为ActiveWindow。\n\t\t-[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values)\n\t\t---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。\n\t\t\n\t\n\n+2009-02-23 v1.2 beta8\n\t-ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed]\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E在Ajax回发\u003Cem\u003E时\u003C\u002Fem\u003E不能计算模拟树的数据[feedback:huihuang]。[fixed]\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E在页面第一次加载\u003Cem\u003E时\u003C\u002Fem\u003E没有不可\u003Cem\u003E选择\u003C\u002Fem\u003E项,则回发\u003Cem\u003E时\u003C\u002Fem\u003E也不会有不可\u003Cem\u003E选择\u003C\u002Fem\u003E项的BUG。[fixed]\n\t-升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed]\n\t-页面加载过程中的\u003Cem\u003E时\u003C\u002Fem\u003E间信息保存在Javascript变量window.box.timeInfo中。[added]\n\t+增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed]\n\t\n\t\n\n+2008-10-28 v1.2 beta7\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E没有选中任何一项,回发\u003Cem\u003E时\u003C\u002Fem\u003E报错[feedback:huihuang]。[fixed]\n\t-Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed]\n\t+PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E优化。[fixed]\n\t\t-去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。\n\t\t-去除RegisterStartupScript的重载函数,只保留最简单的PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterStartupScript(string script)函数。\n\t\t-Resirect增加重载函数Redirect(string url, string target),其中target可能的取\u003Cem\u003E值\u003C\u002Fem\u003E为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。\n\t-Image\u003Cem\u003E控件\u003C\u002Fem\u003E增加ImageWidth\u002FImageHeight\u002FImageCssStyle\u002FImageCssClass\u002FImageAlt属性[feedback:jqpeng]。[fixed]\n\t-发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。[fixed]\n\t-ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed]\n\t-Row和Column布局\u003Cem\u003E时\u003C\u002Fem\u003E,修正IE下设置RowHeight=\"100%\"\u003Cem\u003E时\u003C\u002Fem\u003E显示不正确的BUG。[fixed]\n\t-AccordionLink当鼠标移上和移开\u003Cem\u003E时\u003C\u002Fem\u003E,有背景色的变化效果[feedback:huihuang]。[fixed]\n\t+TabStrip的Tab\u003Cem\u003E控件\u003C\u002Fem\u003E的EnablePostBack属性会在回发\u003Cem\u003E时\u003C\u002Fem\u003E保持(也即是说如果EnablePostBack=true,回发\u003Cem\u003E时\u003C\u002Fem\u003E没\u003Cem\u003E改变\u003C\u002Fem\u003EEnablePostBack的\u003Cem\u003E值\u003C\u002Fem\u003E,则每次切换到此Tab都会回发)。[fixed]\n\t\t-有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。\n\t\n\t\n\n+2008-10-20 v1.2 beta6\n\t+使用\u003Cem\u003E控件\u003C\u002Fem\u003E的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed]\n\t\t-需要替换新的blowery.Web.HttpCompress.dll,解决方案见http:\u002F\u002Fpohee.com\u002Fit\u002Fhttp-compression-in-aspnet-20\u002F。\n\t+\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E优化。[fixed]\n\t\t-去除EnableFirstItem\u002FFirstItem\u003Cem\u003EText\u003C\u002Fem\u003E\u002FFirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。\n\t\t 现在可以方便的在后台\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E1.Items.Insert(0, new ExtAspNet.\u003Cem\u003EList\u003C\u002Fem\u003EItem(\"全部\", \"-1\"));来达到同样的效果。\n\t\t+如果某项(\u003Cem\u003EList\u003C\u002Fem\u003EItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。\n\t\t\t-和Asp.net中的保持一致,\u003Cem\u003EList\u003C\u002Fem\u003EItem的Value\u003Cem\u003E值\u003C\u002Fem\u003E可以为空字符串。 也就是可以这样写\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E1.SelectedValue = \"\";\n\t\t-\u003Cem\u003EList\u003C\u002Fem\u003EItemCollection增加重载函数Add(string \u003Cem\u003Etext\u003C\u002Fem\u003E, string value),这样方便后台添加列表项。\n\t-处于布局内的容器\u003Cem\u003E控件\u003C\u002Fem\u003E(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed]\n\t-注意,\u003Cem\u003E控件\u003C\u002Fem\u003E的高度指的是整个\u003Cem\u003E控件\u003C\u002Fem\u003E的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding\u002Fborder-width\u002Fmargin)。[fixed]\n\t+为所有\u003Cem\u003E控件\u003C\u002Fem\u003E属性增加在VS中的智能提示。[fixed]\n\t\t-需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll\u003Cem\u003E时\u003C\u002Fem\u003Exml会被拷贝到bin目录下,提供VS的智能提示。\n\t+\u003Cem\u003E控件\u003C\u002Fem\u003E的属性如果是枚举类型,如果此属性可以不取\u003Cem\u003E值\u003C\u002Fem\u003E,则默认为None。[fixed]\n\t\t-TriggerIconType.Default -\u003E TriggerIconType.None\n\t\t-SystemIconType.Empty -\u003E SystemIconType.None\n\t\t-RegexPattern.USER_DEFINED -\u003E RegexPattern.None\n\t-表单验证属性名称变化(ValueToCompare-\u003ECompareValue,ControlToCompare-\u003ECompareControl)。[fixed]\n\t+注意:一个属性可以拥有多个\u003Cem\u003E值\u003C\u002Fem\u003E的情况。[fixed]\n\t\t-属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。\n\t\t-其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。\n\t+AccordionLink实现为\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\t-可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion-\u003EAccordionLink)(示例在other\u002Faccordion_links_run.aspx,other\u002Faccordion_links_run_iframe_htm)[feedback:jima]。\n\t+确认:可以方便的\u003Cem\u003E动态\u003C\u002Fem\u003E添加\u003Cem\u003E控件\u003C\u002Fem\u003E,并且可以给\u003Cem\u003E控件\u003C\u002Fem\u003E添加服务器端事件(示例在form\u002Fform_dynamic_run.aspx)。[fixed]\n\t\n\t\n\t\n+2008-10-15 v1.2 beta5\n\t-验证表单字段的ValueToCompare属性,为字符串\u003Cem\u003E时\u003C\u002Fem\u003E会出错的BUG。[fixed]\n\t+优化下拉列表。[fixed]\n\t\t-验证下拉列表\u003Cem\u003E时\u003C\u002Fem\u003E,应该取\u003Cem\u003EList\u003C\u002Fem\u003EItem的Value属性进行验证,而不是\u003Cem\u003EText\u003C\u002Fem\u003E属性。\n\t\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。\n\t\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E不支持Empty\u003Cem\u003EText\u003C\u002Fem\u003E属性。\n\t\t-\u003Cem\u003EList\u003C\u002Fem\u003EItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可\u003Cem\u003E选择\u003C\u002Fem\u003E,以及创建模拟下拉树。\n\t\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。\n\t\n\t\n\n+2008-09-27 v1.2 beta4\n\t+EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会\u003Cem\u003E改变\u003C\u002Fem\u003EAccordion的标题大小,而不会对AccordionPanel起作用(示例见other\u002Faccordion_run.aspx)。[fixed]\n\t\t-Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。\n\t\t-影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。\n\t-AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed]\n\t+AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other\u002Faccordion_links_run.aspx)。[fixed]\n\t\t-原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上标签。\n\t\t-适当增大AccordionPanel中链接的高度20px-\u003E22px,同\u003Cem\u003E时\u003C\u002Fem\u003E对链接的样式也做了微调。\n\t\t-通过BodyPadding控制链接列表的边距。\n\t\t-这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台\u003Cem\u003E动态\u003C\u002Fem\u003E添加链接,效果很赞,此需求由马季提出。\n\t\n\t\n\t\n+2008-09-25 v1.2 beta3\n\t+代码优化与设计\u003Cem\u003E时\u003C\u002Fem\u003E支持(尚需要不断完善,目前可以在ASPX页切换到“设计\u003Cem\u003E时\u003C\u002Fem\u003E”,方便属性的更改和事件处理函数的添加)。[fixed]\n\t\t-Panel\u002FGroupPanel\u002FContentPanel\u002FTree\u002FHiddenField\u002FPageLoading\n\t\t-TabStrip\u002FToolbar\n\t-TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed]\n\t-向Form中\u003Cem\u003E动态\u003C\u002Fem\u003E添加\u003Cem\u003E控件\u003C\u002Fem\u003E的BUG,现在form\u002Fform_dynamic_run.aspx示例已经能正确运行。[fixed]\n\t+大部分容器的子\u003Cem\u003E控件\u003C\u002Fem\u003E集合更正为Items(以前有些是Rows)。[fixed]\n\t\t-影响的\u003Cem\u003E控件\u003C\u002Fem\u003E包括Toolbar\u002FAccordion\u002FAccordionPanel\u002FGroupPanel\u002FPanel\u002FSimpleForm\u002FWindow等。\n\t\t-保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。\n\t\t-保留TabStrip的Tabs(TabCollection)属性。\n\t\t-保留PageLayout\u002FBorderLayout的Regions(RegionCollection)属性。\n\t-预祝今晚神七发射成功。\n\t\n\t\n\t\n+2008-09-22 v1.2 beta2\n\t+Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed]\n\t\t-表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项\u003Cem\u003E时\u003C\u002Fem\u003E数组越界。所有使用box\u003Cem\u003E控件\u003C\u002Fem\u003E的应用程序都受到此BUG的影响,需尽快更新到新版本。\n\t+代码优化与设计\u003Cem\u003E时\u003C\u002Fem\u003E支持(示例中表单\u003Cem\u003E控件\u003C\u002Fem\u003E都已支持设计)。[fixed]\n\t\t-PageManager\u002FSimpleForm\u002FButton\u002FHyperLink\u002FLabel\u002FImage\u002FLinkButton\u002F\u003Cem\u003EText\u003C\u002Fem\u003EBox\n\t\t-TriggerBox\u002FTwinTriggerBox\u002FWindow\u002F\u003Cem\u003EText\u003C\u002Fem\u003EArea\u002FHtmlEditor\u002FDatePicker\u002FNumberBox\n\t\t-CheckBox\u002FRadioButton\u002FRadioButton\u003Cem\u003EList\u003C\u002Fem\u003E\u002F\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E\n\t\t-Grid\n\n\n\n+2008-09-19 v1.2 beta1\n\t-Image\u002FLinkButton\u002FHyperLink增加一些Ajax可更新属性。[fixed]\n\t+隐藏的方式由HideMode属性控制Visibility\u002FOffsets\u002FDisplay。[fixed]\n\t\t-修正Form\u002FSimpleForm中隐藏一个表单字段(Hidden=false)会占据页面空间的BUG。\n\t-Toolbar\u003Cem\u003EText\u003C\u002Fem\u003E\u002FToolbarFill\u002FToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed]\n\t-Button去除MarginRight属性(可以通过CssStyle=\"margin-right:5px;\"达到相同的效果)[fixed]\n\t\n\t\n\t\n+2008-09-09 v1.1\n\t+Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在\u003Cem\u003E控件\u003C\u002Fem\u003E中。[fixed]\n\t\t-网报:CssClass=\"toolbar-pagemenu\" CssStyle=\"border:0px;\",同\u003Cem\u003E时\u003C\u002Fem\u003E定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(..\u002Fimages\u002Fpagemenu_toolbar_background.gif) repeat-x left top;}。\n\t-Region去除默认的Layout=Fit,如果希望Region使用Fit\u002FAnchor\u002FColumn\u002FRow等布局的话,需要手工指定。[fixed]\n\t-ToolbarSeparator\u002FToolbarFill在Ajax更新Hidden属性的BUG。[fixed]\n\t+布局整理。[fixed]\n\t\t-新增Column\u002FAbsolute\u002FRow三种布局,加上以前的Container\u002FFit\u002FAnchor\u002FAccordion\u002FBorder\u002FForm六种布局,总共有9中布局可供使用。\n\t\t-其中一些\u003Cem\u003E控件\u003C\u002Fem\u003E默认使用一种布局:SimpleForm(Form)\u002FForm(Form)\u002FPanel-GroupPanel(Container)\u002FAccordion(Accordion)\u002FPageLayout(Border)\u002FBorderLayout(Border)\u002FTabStrip(Card),所有布局\u003Cem\u003E控件\u003C\u002Fem\u003E默认的布局是Container。\n\t\t-经常用到的布局\u003Cem\u003E控件\u003C\u002Fem\u003E:SimpleForm\u002FForm\u002FAccordion\u002FTabStrip\u002FBorderLayout,经常用到的布局:Fit\u002FRow\u002FAnchor\n\t\n\t\n\t\n+2008-09-08 v1.1 beta7\n\t-MenuButton\u002FMenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick=\"false\" CssStyle=\"cursor:default;\" [feedback:huayu]。[fixed]\n\t-MenuButton\u002FMenuHyperLink\u002FMenuSeparator\u002FMenu\u003Cem\u003EText\u003C\u002Fem\u003E增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax\u003Cem\u003E时\u003C\u002Fem\u003E显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed]\n\t+大部分的ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E增加Hidden属性(少数几个\u003Cem\u003E控件\u003C\u002Fem\u003E没有此属性:Menu),这样在Ajax\u003Cem\u003E时\u003C\u002Fem\u003E可以显示隐藏\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\t-注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的\u003Cem\u003E控件\u003C\u002Fem\u003E渲染到客户端但是隐藏。\n\t\t-US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。\n\t\t-网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。\n\n\n\n+2008-09-04 v1.1 beta6\n\t-PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed]\n\t+模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed]\n\t\t-因为if(\"0,2,9,11,\".indexOf('1,')\u003E=0){ok},这显然是不对的,此BUG涉及很多\u003Cem\u003E控件\u003C\u002Fem\u003E(Grid,\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E,TabStrip)。\n\t\t-解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) \u003E= 0){ok}。\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E在Ajax\u003Cem\u003E时\u003C\u002Fem\u003E应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed]\n\t-Button\u002FMenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed]\n\t-Tree的Ajax支持(尚需优化)。[fixed]\n\t\n\t\n\n+2008-09-02 v1.1 beta5\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E如果第一次没有绑定\u003Cem\u003E值\u003C\u002Fem\u003E,应该绑定到[[]](二维数组),而不是[](一维数组)。[fixed]\n\t-模拟树的\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载\u003Cem\u003E时\u003C\u002Fem\u003E,即使没有数据也需要设置Data\u003Cem\u003EText\u003C\u002Fem\u003EField\u002FDataValueField\u002FDataSimulateTreeLevelField\u002FDataEnableSelectField等属性的\u003Cem\u003E值\u003C\u002Fem\u003E,否则Ajax回发\u003Cem\u003E时\u003C\u002Fem\u003E会出错)。[fixed]\n\t-UserControlConnector导致的Ajax错误,去除UpdatePanelConnector\u003Cem\u003E控件\u003C\u002Fem\u003E(以后不会用AspnetAjax,这个\u003Cem\u003E控件\u003C\u002Fem\u003E已经完成使命)。[fixed]\n\t-不要使用Asp.net的\u003Cem\u003E控件\u003C\u002Fem\u003EHiddenField,而是使用ExtAspNet的HiddenField,因为Asp.net的\u003Cem\u003E控件\u003C\u002Fem\u003E在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed]\n\t-网报Ajax整合基本完成(除了待审批-\u003E下一步[审核\u002F归档\u002F出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed]\n\t-IE下,RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E中项如果存在汉字,则会换行的BUG。[fixed]\n\t-增加两个Theme[Slate\u002FBlack](样式尚需完善)。[fixed]\n\t\n\t\n\t\n+2008-09-01 v1.1 beta4\n\t-非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed]\n\t-RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E去除EnableBackgroundColor\u002FEnableLightBackgroundColor属性,背景色是透明的,也就是和父\u003Cem\u003E控件\u003C\u002Fem\u003E(SimpleForm\u002FForm)的背景色一致。[fixed]\n\t-TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed]\n\t-Web.config中增加配置项FormLabelWidth=\"80\"(默认为80),同\u003Cem\u003E时\u003C\u002Fem\u003EPageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm\u002FForm的表单字段标题的宽度。[fixed]\n\t+完善Ajax。[fixed]\n\t\t-RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E增加Ajax可更新属性SelectedIndex(SelectedValue\u002F\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E)。\n\t\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E增加Ajax可更新属性Enable\u002FSelectedIndex(SelectedValue\u002F\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E)\u002FDataSource。\n\t\t-Grid增加Ajax可更新属性Columns(也就是说Grid列在回发\u003Cem\u003E时\u003C\u002Fem\u003E隐藏显示了一些,也能正确的Ajax)。\n\t\t-Toolbar\u003Cem\u003EText\u003C\u002Fem\u003E增加Ajax可更新属性\u003Cem\u003EText\u003C\u002Fem\u003E。\n\t\t\n\t\t\n\t\t\n+2008-08-31 v1.1 beta3\n\t-TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed]\n\t-重定向页面,使用系统的方法 PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.Redirect(string url),使用Response.Redirect方法会出错。[fixed]\n\t+安全的Ajax设计。[fixed]\n\t\t-这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同\u003Cem\u003E时\u003C\u002Fem\u003E在速度上会有进一步的提升。\n\t\t-基本思想:安全的Ajax交互,明确Ajax回发\u003Cem\u003E时\u003C\u002Fem\u003E支持\u003Cem\u003E控件\u003C\u002Fem\u003E哪些属性的\u003Cem\u003E改变\u003C\u002Fem\u003E,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供\u003Cem\u003E控件\u003C\u002Fem\u003E级别的EnableAjax属性。\n\t\t-整理支持Ajax的\u003Cem\u003E控件\u003C\u002Fem\u003E属性\u003Cem\u003E改变\u003C\u002Fem\u003E列表(所有被支持的属性\u003Cem\u003E改变\u003C\u002Fem\u003E都是安全的、快速的,所有不被支持的属性\u003Cem\u003E改变\u003C\u002Fem\u003E不会对UI起作用,同\u003Cem\u003E时\u003C\u002Fem\u003E是安全的,不会有js错误)。\n\t-网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed]\n\t\n\t\n\t\n+2008-08-29 v1.1 beta1\n\t+Window\u003Cem\u003E控件\u003C\u002Fem\u003E是否弹出的状态在回发\u003Cem\u003E时\u003C\u002Fem\u003E维持。[fixed]\n\t\t-\u003Cem\u003E控件\u003C\u002Fem\u003E设计的一个原则,凡是可以在客户端\u003Cem\u003E改变\u003C\u002Fem\u003E的属性都应该在回发\u003Cem\u003E时\u003C\u002Fem\u003E保持属性的状态。\n\t+完全抛弃Asp.NetAjax,ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E内置Ajax支持。[fixed]\n\t\t-这是一个\u003Cem\u003E值\u003C\u002Fem\u003E得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。\n\t\t-不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。\n\t\t+在这种设计下,其实可以完全抛弃Javascript。\n\t\t\t-比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。\n\t\t\t-第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。\n\t\t\t-推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。\n\t\t+目前ExtAspNetAjax的限制。\n\t\t\t-只对ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E起作用,对Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E不起作用。\n\t\t\t-对容器\u003Cem\u003E控件\u003C\u002Fem\u003E(有子\u003Cem\u003E控件\u003C\u002Fem\u003E的\u003Cem\u003E控件\u003C\u002Fem\u003E)不起作用,只对最底层的\u003Cem\u003E控件\u003C\u002Fem\u003E起作用。\n\t\t\t-对\u003Cem\u003E改变\u003C\u002Fem\u003E\u003Cem\u003E控件\u003C\u002Fem\u003E的Visible属性会有错误。\n\t\t\t-Window\u003Cem\u003E控件\u003C\u002Fem\u003E的属性\u003Cem\u003E改变\u003C\u002Fem\u003E只有少数几个起作用(Popup,IFrameUrl)。\n\t-PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t-Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed]\n\t-Grid选中行的状态在第一次回发\u003Cem\u003E时\u003C\u002Fem\u003E不能保持的BUG。[fixed]\n\t\n\t\n\t\n+2008-08-26 v1.0\n\t+已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。\n\t\t-主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能\u003Cem\u003E时\u003C\u002Fem\u003E要禁用此插件。\n\t+优化弹出窗口中IFrame的显示速度。[fixed]\n\t\t-在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建\u003Cem\u003E时\u003C\u002Fem\u003E间。\n\t-PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor=\"#CADDF7\",以便分隔符的颜色和Toolbar的颜色一致)[fixed]\n\t+PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed]\n\t\t-一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的\u003Cem\u003E值\u003C\u002Fem\u003E)(示例在default.aspx)。\n\t-TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed]\n\t+TabStrip中非当前Tab会延迟渲染。[fixed]\n\t\t-这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染\u003Cem\u003E时\u003C\u002Fem\u003E间。\n\t\t-由于非当前Tab不会在页面加载\u003Cem\u003E时\u003C\u002Fem\u003E渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到\u003Cem\u003E控件\u003C\u002Fem\u003E的render事件中。\n\t-不能比较两个DataPicker大小的BUG。[fixed]\n\t-TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed]\n\t-全新的ExtAspNet.Examples(基础知识\u002F表单\u003Cem\u003E控件\u003C\u002Fem\u003E\u002F数据绑定\u002F容器布局\u002FIFrame框架)。[fixed]\n\t\n\t\n\t\n+2008-08-19 v0.4 beta6\n\t+PageManager增加两个属性(EnableInlineStyleJavascript\u002FApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe\u002Fdefault.aspx和iframe\u002Fpage3.aspx)。[fixed]\n\t\t-测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。\n\t-RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed]\n\t+extjs的BUG,当页面中含有iframe\u003Cem\u003E时\u003C\u002Fem\u003E,Ext.onReady会被调用两次(IE6\u002FIE7)(http:\u002F\u002Fwww.extjs.net\u002Fforum\u002Fshowthread.php?t=43246)(示例在test.aspx)[fixed]\n\t\t-现在的解决方法是在初始化\u003Cem\u003E时\u003C\u002Fem\u003E:if(this.initialized){return;}this.initialized=true;\n\t+需要先回发页面再弹出IFrame窗口。[fixed]\n\t\t-在回发\u003Cem\u003E时\u003C\u002Fem\u003E设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口\u003Cem\u003E时\u003C\u002Fem\u003E要注意设置Popup=false。\n\t\t-另一种做法(推荐):PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterStartupScript(Window99.GetShowReference(\".\u002Fsimpleform.aspx\"));。\n\t\n\t\t\n\t\n+2008-08-15 v0.4 beta5\n\t-点击关闭窗口的按钮,在IE6下会有JS错误。[fixed]\n\t-增加BorderLayout\u003Cem\u003E控件\u003C\u002Fem\u003E,示例在iframe\u002Fborderlayout.aspx。[fixed]\n\t+Radiobutton\u003Cem\u003Elist\u003C\u002Fem\u003E显示有重影(示例在radio.aspx)。[fixed]\n\t\t-全新的样式。\n\t\t-去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。\n\t\t-GetValueReference取得的\u003Cem\u003E值\u003C\u002Fem\u003E不正确的BUG。\n\t-\u003Cem\u003E动态\u003C\u002Fem\u003E向Form中添加FormRow,并\u003Cem\u003E动态\u003C\u002Fem\u003E的向FormRow中添加表单字段,以及如何取得表单字段的\u003Cem\u003E值\u003C\u002Fem\u003E。(示例在form_dynamic.aspx)[fixed]\n\t+IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed]\n\t\t-这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本\u003Cem\u003E改变\u003C\u002Fem\u003E的IFrameUrl会在回发\u003Cem\u003E时\u003C\u002Fem\u003E保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。\n\t\t-现在\"是否弹出窗口、窗口标题、IFrameUrl\"在客户端的\u003Cem\u003E改变\u003C\u002Fem\u003E,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx)\n\t\n\t\n\t\n+2008-08-13 v0.4 beta4\n\t-点击关闭窗口的按钮,在IE下会有JS错误。[fixed]\n\t-Window的右上角关闭图标增加提示,优化事件响应。[fixed]\t\n\t-Window的代码重构。[fixed]\t\n\t+修正一个的内存泄漏。[fixed]\n\t\t-IE7下测试,打开iframe\u002Fdefault.aspx页面,iexplorer占内存68.368M。\n\t\t-内存存在泄漏\u003Cem\u003E时\u003C\u002Fem\u003E,点击iframe\u002Fpage3.aspx页面8次后iexplorer占118.792M内存。\n\t\t-修正后,点击iframe\u002Fpage3.aspx页面8次后iexplorer占76.492M内存。\n\t\t-IE窗口最小化\u003Cem\u003E时\u003C\u002Fem\u003E,IE会自动进行垃圾回收。\n\t\n\t\n\t\n+2008-08-12 v0.4 beta3\n\t-底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed]\n\t-Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight=\"true\"解决)。[fixed]\n\t+页面正在加载的提示尽早的显示出来。[fixed]\n\t\t-首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。\n\t\t-加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。\n\t\n\t\n\t\n+2008-08-08 v0.4 beta2\n\t-TabStrip延\u003Cem\u003E时\u003C\u002Fem\u003E加载出错。[fixed]\n\t-Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为.\u002FFE_ApplyEditor.aspx或~\u002FPages_ExtAspNet\u002FFE_ApplyEditor.aspx。[fixed]\n\t-Window的WindowPosition=\"Center\"并且Target=\"_parent\",则会JS错误。[fixed]\n\t-实现网报首页下拉菜单和左侧菜单的导航功能。[fixed]\n\t-Window的创建在页面显示后进行,不计算在js渲染\u003Cem\u003E时\u003C\u002Fem\u003E间内。[fixed]\n\t-优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed]\n\t-button_iframe.aspx默认会加载form.aspx页面(Window\u003Cem\u003E控件\u003C\u002Fem\u003E的BUG)。[fixed]\n\t-Window中的保存并关闭按钮和Asp.netAjax冲突。[fixed]\n\t-优化关闭Window的js脚本,减少写到页面的js大小。[fixed]\n\t-加快“保存并关闭”按钮关闭窗口的速度,使用PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed]\n\t\n\t\n\t\n+2008-08-05 v0.4 beta1\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E去除Traditional属性,和传统的Asp.net\u003Cem\u003E控件\u003C\u002Fem\u003E一样不可编辑。[fixed]\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E增加Selected\u003Cem\u003EText\u003C\u002Fem\u003E属性(去除了模拟树\u003Cem\u003E时\u003C\u002Fem\u003E通过\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E的多余html字符)。[fixed]\n\t-为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed]\n\t-将\u003Cem\u003E生成\u003C\u002Fem\u003E的js对象的名称简单化,这样可以减少\u003Cem\u003E生成\u003C\u002Fem\u003E的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。[fixed]\n\t+弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed]\n\t\t-因为在页面的Page_Load中,if (!IsPostBack){PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发\u003Cem\u003E时\u003C\u002Fem\u003E没有注册到页面,因为js调用此脚本\u003Cem\u003E时\u003C\u002Fem\u003E报错。\n\t\t-一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。\n\t\t-另一种办法就是在PageManager\u003Cem\u003E控件\u003C\u002Fem\u003E中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容\u003Cem\u003E改变\u003C\u002Fem\u003E的脚本)的属性(会在每次页面回发(包含ajax回发)\u003Cem\u003E时\u003C\u002Fem\u003E注册脚本)(示例在button_iframe.aspx\u002Fsimpleform.aspx)。\n\t+PageManager\u003Cem\u003E控件\u003C\u002Fem\u003E增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed]\n\t\t-这个手工添加onReady函数能够在每次页面回发\u003Cem\u003E时\u003C\u002Fem\u003E都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。\n\t-每个页面必须添加一个PageManager\u003Cem\u003E控件\u003C\u002Fem\u003E,否则会出错,同\u003Cem\u003E时\u003C\u002Fem\u003E去除DesignTimeStyle\u003Cem\u003E控件\u003C\u002Fem\u003E(作为PageManager的属性出现)。[fixed]\n\t-\u003Cem\u003EText\u003C\u002Fem\u003EField等表单字段增加Readonly属性。[fixed]\n\t+全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。[fixed]\n\t\t-最大的好处是可以减少页面下载完毕后Javascript渲染\u003Cem\u003E时\u003C\u002Fem\u003E间(可以节约一般的渲染\u003Cem\u003E时\u003C\u002Fem\u003E间)。(所有示例在iframe文件夹下)\n\t\t+示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx\u002Fpage2.aspx\u002Fsimpleform.aspx)\n\t\t\t-虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window\u003Cem\u003E控件\u003C\u002Fem\u003E增加一个属性(Target=\"_parent\"),就完成了两种框架的转换,是不是很酷。\n\t\t\t-显然,\u003Cem\u003E控件\u003C\u002Fem\u003E本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)\u002Fpage2.aspx(B)\u002Fsimpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口\u003Cem\u003E时\u003C\u002Fem\u003E,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B\u003Cem\u003E时\u003C\u002Fem\u003E,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。\n\t\t-示例2,Grid中弹出窗口。(default.aspx\u002Fpage3.aspx\u002Fsimpleform.aspx)\t\n\t\t+示例3,TriggerBox弹出窗口。(default.aspx\u002Ftriggerbox.aspx\u002Fsimpleform.aspx)\t\n\t\t\t-在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。\n\t\t-示例4,弹出窗口中的弹出窗口。\n\t-对整个Examples更新测试。[fixed]\n\t\n\t\n\t\n+2008-07-31 v0.3 beta12\n\t-IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed]\n\t-对TabStrip\u002FPanel\u002FWindow中的IFrame重新设计,如果设置IFrameUrl=\"#\"或者\"about:blank\",则不渲染iframe到页面节点,同\u003Cem\u003E时\u003C\u002Fem\u003E第二次打开Window中的IFrame不会有残影出现。[fixed]\n\t-如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed]\n\t-Tree\u003Cem\u003E控件\u003C\u002Fem\u003E,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed]\n\t+规范关闭窗口\u003Cem\u003E时\u003C\u002Fem\u003E提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx\u002Fsimpleform.aspx)。[fixed]\n\t\t-内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageCon\u003Cem\u003Etext\u003C\u002Fem\u003E.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。\n\t-参照Yslow的评分规则,将JS文件引用由head移动到body中。[fixed]\n\t-Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed]\n\t+IFrame内的页面宽度和高度会自动设置(是不是还在为1px\u002F2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx\u002Fsimpleform.aspx\u002Fsimpleform2.aspx)[fixed]\n\t\t-增加PageManager\u003Cem\u003E控件\u003C\u002Fem\u003E(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE\u002FFirefox)。\n\t\n\t\n\t\n+2008-07-24 v0.3 beta11\n\t-web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同\u003Cem\u003E时\u003C\u002Fem\u003E每个表单字段都增加OffsetRight属性 [feedback:jima]。[fixed]\n\t-Window在回发\u003Cem\u003E时\u003C\u002Fem\u003E设置的Title不起作用的BUG。[fixed]\n\t-增加Image\u003Cem\u003E控件\u003C\u002Fem\u003E [feedback:jima]。[fixed]\n\t-Tree\u003Cem\u003E控件\u003C\u002Fem\u003E,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed]\n\t-Image增加ToolTipTitle\u002FToolTipAutoHide两个属性,当提示信息特别长\u003Cem\u003E时\u003C\u002Fem\u003E,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed]\n\t-去掉\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E\u003Cem\u003E控件\u003C\u002Fem\u003E的\u003Cem\u003EText\u003C\u002Fem\u003E属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed]\n\t-过滤提示消息中的换行符(转换为),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed]\n\t\n\t\n\t\n+2008-07-23 v0.3 beta10\n\t+完善Tree\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\t-如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。\n\t\t-ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。\n\t\t-更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。\n\t-Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码![fixed]\n\t-Grid所有类型的列增加DataTooltipField\u002FDataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-22 v0.3 beta9\n\t+IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed]\n\t\t-发现原来ie6不能正确解析li的高度,必须手工设置才行(style=\"height:20px;\")。\n\t+IE6\u002FIE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed]\n\t\t-虽然最后未能解决##差旅交通费在IE和Firefox下显示的不同效果。\n\t\t-但是通过用来代替,从而实现FF和IE下样式的统一。\n\t\t-刚看到old9的解决方案:把“差旅交通费”改成“差旅交通费”,在IE下和FF下的都不换行,:-)\n\t-LinkButton增加OnClick事件 [feedback:huihuang]。[fixed]\n\t-Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed]\n\t+增加树\u003Cem\u003E控件\u003C\u002Fem\u003E(Tree)(示例在tree2.aspx)。[fixed]\n\t\t-可以在回发\u003Cem\u003E时\u003C\u002Fem\u003E维持树的状态(选中行,折叠\u002F展开,CheckBox)。\n\t\t-可以通过Inline的方式添加树节点,也可以绑定到XmlDocument\u002FXmlDataSource\u002FSiteMap。\n\t\t-点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。\n\t\n\t\n\t\n+2008-07-16 v0.3 beta8\n\t+ContentPanel中放置ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E,则渲染\u003Cem\u003E时\u003C\u002Fem\u003E会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed]\n\t\t-隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet\u003Cem\u003E控件\u003C\u002Fem\u003E,如果容器的display='none',则会出现各种问题(主要是大小不对)。\n\t\t 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。\n\t\t-现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。\n\t+IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。[fixed]\n\t\t-调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。\n\t\t-最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG:\n\t\t 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();):\n\t\t 示例在 Site.Master 页面。\n\t+集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当\u003Cem\u003E改变\u003C\u002Fem\u003E窗口大小\u003Cem\u003E时\u003C\u002Fem\u003E你会惊讶的发现内容区域的内容全部为空了![fixed]\n\t\t-解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();),\n\t\t 这样的代码让我想起刷新窗口\u003Cem\u003E时\u003C\u002Fem\u003E那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。\n\t\n\t\n\t\n+2008-07-14 v0.3 beta6\n\t-增加FlashObject\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t-PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed]\n\t-Accordion选中样式微调。[fixed]\n\t-预加载Form表单出错\u003Cem\u003E时\u003C\u002Fem\u003E提示信息的背景图片。[fixed]\n\t+Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed]\n\t\t-因为延迟加载数据不会\u003Cem\u003E改变\u003C\u002Fem\u003EGrid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置\"EnableDelayRender=false\"。\n\t-\u003Cem\u003E改变\u003C\u002Fem\u003EGrid中静态的CheckBoxField图片。[fixed]\n\t-TabStrip增加TabIndexChanged事件,同\u003Cem\u003E时\u003C\u002Fem\u003ETab增加EnablePostBack,可以在点击一个Tab\u003Cem\u003E时\u003C\u002Fem\u003E引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed]\n\t\n\t\n\t\n+2008-07-12 v0.3 beta5\n\t-页面菜单Toolbar的分割符和背景不相融合。[fixed]\n\t-表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同\u003Cem\u003E时\u003C\u002Fem\u003E增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed]\n\t\t-如果是同种类型的表单字段,不需要指定CompareType,比如两个NumberBox比较\u003Cem\u003E值\u003C\u002Fem\u003E的大小不需要指定CompareType,而一个NumberBox和\u003Cem\u003EText\u003C\u002Fem\u003EBox比较大小需要指定CompareType。\n\t+如果在编辑页面使用AspNetAjax,则不能在回发\u003Cem\u003E时\u003C\u002Fem\u003E关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx\u002Fajax_editor.aspx)。[fixed]\n\t\t-这是由于ajax后执行的javascript中不能有return false语句。\n\t+在文本框失去焦点\u003Cem\u003E时\u003C\u002Fem\u003E,执行一些Javascript脚本(示例在\u003Cem\u003Etext\u003C\u002Fem\u003Ebox_blur.aspx) [feedback:xmzhu]。[fixed]\n\t\t-在页面添加onReady函数(会被系统调用),然后用javascript监视文本框\u003Cem\u003E值\u003C\u002Fem\u003E的\u003Cem\u003E改变\u003C\u002Fem\u003E。\n\t-弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window\u003Cem\u003E控件\u003C\u002Fem\u003E的IFrameUrl指向这个页面而不是\"#\"。[fixed]\n\t+弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮\u003Cem\u003E时\u003C\u002Fem\u003E会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed]\n\t\t-原来的调用方法太麻烦(见示例中alert\\alert_1.aspx和alert\\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。\n\t-点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed]\n\t+增加Menu、Menu\u003Cem\u003EText\u003C\u002Fem\u003E、MenuSeparator、MenuButton、MenuHyperLink\u003Cem\u003E控件\u003C\u002Fem\u003E,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed]\n\t-增加SplitButton\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\n\t\n\t\n+2008-07-09 v0.3 beta4\n\t-DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed]\n\t+Form表单字段(\u003Cem\u003EText\u003C\u002Fem\u003EBox,\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E...)之间可以比较大小 [feedback:huihuang]。[fixed]\n\t\t-增加ControlToCompare\u002FValueToCompare\u002FCompareOperator\u002FCompareMessage四个属性,示例在form_compare.aspx。\n\t+TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed]\n\t\t-特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活\u003Cem\u003E时\u003C\u002Fem\u003E才设置Url。\n\t-RadioButton\u003Cem\u003EList\u003C\u002Fem\u003E增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed]\n\t-FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed]\n\t+表单字段Enable=false\u003Cem\u003E时\u003C\u002Fem\u003E显示颜色太浅 [feedback:jima]。[fixed]\n\t\t-覆盖缺省样式的.x-item-disabled,设置不透明。\n\t\n\t\n\t\n+2008-07-08 v0.3 beta3\n\t-Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed]\n\t+增加HiddenField\u003Cem\u003E控件\u003C\u002Fem\u003E。[fixed]\n\t\t-其实用\u003Cem\u003EText\u003C\u002Fem\u003EBox也能模拟HiddenField的行为,只需要设置CssStyle=\"display:none;\"即可。\n\t+TriggerBox 如果 Enable\u003Cem\u003EText\u003C\u002Fem\u003EBox = true,则不能将\u003Cem\u003EText\u003C\u002Fem\u003E回发(这是html的限制)。[fixed]\n\t\t-最后的解决方案居然是设置 readonly=true,同\u003Cem\u003E时\u003C\u002Fem\u003E更改属性为 Readonly(示例在\u003Cem\u003Etext\u003C\u002Fem\u003Ebox2.aspx)。\n\t-模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed]\n\t+控制下拉列表某些项不可以\u003Cem\u003E选择\u003C\u002Fem\u003E(示例在\u003Cem\u003Edropdown\u003C\u002Fem\u003E\u003Cem\u003Elist\u003C\u002Fem\u003E2.aspx)。[fixed]\n\t\t-增加 DataEnableSelectField 属性,不可\u003Cem\u003E选择\u003C\u002Fem\u003E的项变灰,并且鼠标经过\u003Cem\u003E时\u003C\u002Fem\u003E没有样式。\n\t-LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-07 v0.3 beta2\n\t+增加UpdatePanelConnector\u003Cem\u003E控件\u003C\u002Fem\u003E,支持在布局构建的页面使用Asp.net Ajax。[fixed]\n\t\t-使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。\n\t\t-示例在ajax3.aspx\u002Fcontent_page4.aspx。\n\t\t-示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。\n\t \n\t \n\t\n+2008-07-03 v0.3 beta1\n\t+容器\u003Cem\u003E控件\u003C\u002Fem\u003E的AutoHeight\u002FAutoWidth默认为false。[fixed]\n\t\t-使用GroupPanel的地方需要手工添加AutoHeight=\"true\"属性。\n\t+增加UserControlConnector,可以在其中放置用户\u003Cem\u003E控件\u003C\u002Fem\u003E(示例在page_usercontrol.aspx)。[fixed]\n\t\t-也可以在ContentPanel中放置用户\u003Cem\u003E控件\u003C\u002Fem\u003E,注意两者的区别。\n\t+增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed]\n\t+支持Asp.net ajax异步加载。[fixed]\n\t\t-有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx\u002Fcontent_ajax2.aspx中。\n\t\t-对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。\n\t\n\t\n\t\n+2008-07-02 v0.2 beta12\n\t+关闭前提示当前页面已经被修改(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-支持Iframe内按钮和window右上角关闭按钮。\n\t\t-删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。\n\t+iframe中的alert\u002Fconfirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed]\n\t\t-在Firefox下还有问题。[fix pending]\n\t+排序\u003Cem\u003E时\u003C\u002Fem\u003E在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed]\n\t\t-可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。\n\t\t-可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。\n\t+HyperLinkField\u002FWindowField的链接地址支持服务器端格式(即是~\u002Falert.aspx)。[fixed]\n\t-TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed]\n\t-可以在ContentPanel中放置用户\u003Cem\u003E控件\u003C\u002Fem\u003E(示例在page_usercontrol.aspx)。[fixed]\n\t\t\n\t\n\t\n+2008-06-30 v0.2 beta11\n\t-增加TwinTriggerBox\u003Cem\u003E控件\u003C\u002Fem\u003E(示例在twintriggerbox.aspx)。[fixed]\n\t-Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录\u003Cem\u003E时\u003C\u002Fem\u003E总记录数不会变化 [feedback:zgjiang2]。[fixed]\n\t-关闭Window\u003Cem\u003E时\u003C\u002Fem\u003EPostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed]\n\t-如果表单验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。[fixed]\n\t+页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-目前还不支持Window右上角关闭按钮的提示保存功能。\n\t-Master\u002FContent的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed]\n\t-Grid中的LinkButtonField设置Confirm\u003Cem\u003EText\u003C\u002Fem\u003E会出错 [feedback:huihuang]。[fixed]\n\t-增加静态类Confirm。[fixed]\n\t\n\t\n\t\n+2008-06-27 v0.2 beta10\n\t+Grid完善。[fixed]\n\t\t-CheckBoxField在回发\u003Cem\u003E时\u003C\u002Fem\u003E不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。\n\t\t-Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示\u003Cem\u003E时\u003C\u002Fem\u003E的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。\n\t\t-切换分页\u003Cem\u003E时\u003C\u002Fem\u003E清空选中的\u003Cem\u003E值\u003C\u002Fem\u003E [feedback:jqpeng]。\n\t\t-增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。\n\t-\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在\u003Cem\u003Edropdown\u003C\u002Fem\u003E\u003Cem\u003Elist\u003C\u002Fem\u003E_simulate_tree.aspx)。\n\t\n\t\n\t\n+2008-06-25 v0.2 beta9\n\t+Window窗体中的","createTime":"2010-09-29 14:37:08","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"4\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fwode2600\u002F2726130\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"4\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fwode2600\u002F2726130\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Ftianzhu131\u002F1785804","title":"API精灵源码(C#编)","desc":"\u002F*\n API精灵 FOR C# 开始设计日期 2004.03.06\n 设计目的:简单快速对C#中使用的API函数进行查询,并给出调用代码\n 设计进度:\n 2004.03.09 完成对的查询功能,包括 代码调用,中文注释,所需的DLL库,与C#中函数对应关系 \n 2004.03.10 0:48:52 完成了用StringBuilder数组对原ComboBox的替换,可以使程序不用从新读取数据库就可以刷新修改后的信息!\n 2004.03.10 18:00:00 完成了用Array\u003Cem\u003EList\u003C\u002Fem\u003E对StringBuilder数组的替换节省2M内存\n 2004.03.11 21:10:15 完成滚动字幕的设置,启用了一个TIMER\u003Cem\u003E控件\u003C\u002Fem\u003E,然后设置\u003Cem\u003E时\u003C\u002Fem\u003E间,删除字符串的第一个字母已达到滚动效果!\n 2004.03.11 22:02:00 改正更新\u003Cem\u003E时\u003C\u002Fem\u003E出现空\u003Cem\u003E值\u003C\u002Fem\u003E出错问题,新填函数isnull\n 2004.03.12 13:22:08 完成关键字高亮显示 高亮显示函数 mykeywords\n 2004.03.12 22:08:20 加强了高亮显示函数 mykeywords的功能,使其能识别不同的关键字并显示不同的颜色\n 2004.03.14 01:40:00 完成对CONST的查询,并且增加了 mykeywords1函数,使其关键字显示性能提高\n 2004.03.14 13:12:00 添加了提示信息,提示信息设置在函数 mytips() 中\n 2004.03.15 21:51:20 更改数据库和WINAPI.TXT路径为程序运行路径\n 2004.03.15 22:31:50 添加了鼠标右键信息\n 2004.03.15 23.23:30 添加了数据库密码\n 2004.03.16 23:24:30 添加了版权信息以及相应提示\n *\u002F\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Data;\nusing System.Data.OleDb;\nusing System.Runtime.InteropServices;\nusing System.IO;\n\n\n\nnamespace API精灵\n{\n\t\u002F\u002F\u002F \n\t\u002F\u002F\u002F Form1 的摘要说明。\n\t\u002F\u002F\u002F 这个版本没有使用oleDbDataAdapter+DataSet对数据进行存取,而是使用的OleDbCommand +OleDbDataReader 的形式。\n\t\u002F\u002F\u002F 主要是想试验一下不用oleDbDataAdapter+DataSet的数据存取速度。\n\t\u002F\u002F\u002F \n\tpublic class Form1 : System.Windows.Forms.Form\n\t{\n\t\tprivate System.Windows.Forms.Button button1;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.GroupBox groupBox2;\n\t\tprivate System.Windows.Forms.GroupBox groupBox3;\n\t\tprivate System.Windows.Forms.Button button4;\n\t\tprivate System.Windows.Forms.\u003Cem\u003EText\u003C\u002Fem\u003EBox mysearch;\n\t\tprivate System.Windows.Forms.\u003Cem\u003EList\u003C\u002Fem\u003EBox tip\u003Cem\u003Elist\u003C\u002Fem\u003E;\n\t\tprivate System.Windows.Forms.ComboBox select_type;\n\t\tprivate System.Windows.Forms.\u003Cem\u003EText\u003C\u002Fem\u003EBox dll\u003Cem\u003Etext\u003C\u002Fem\u003E;\n\t\t\u002F\u002F\u002F \n\t\t\u002F\u002F\u002F 必需的设计器变量。\n\t\t\u002F\u002F\u002F \n\t\t\u002F\u002F自定义变量\n\t\tprivate Array\u003Cem\u003EList\u003C\u002Fem\u003E fundll = new Array\u003Cem\u003EList\u003C\u002Fem\u003E();\u002F\u002F保存读取出来的DLL内容\n\t\tprivate Array\u003Cem\u003EList\u003C\u002Fem\u003E funtips = new Array\u003Cem\u003EList\u003C\u002Fem\u003E();\u002F\u002F保存读取出来的中文提示信息\n\t\tprivate Array\u003Cem\u003EList\u003C\u002Fem\u003E funcode = new Array\u003Cem\u003EList\u003C\u002Fem\u003E();\u002F\u002F保存读取出来的C#调用代码\t\t\n private Array\u003Cem\u003EList\u003C\u002Fem\u003E funmat = new Array\u003Cem\u003EList\u003C\u002Fem\u003E();\u002F\u002F保存读取出来的C#对应函数\n\t\tprivate Array\u003Cem\u003EList\u003C\u002Fem\u003E funwin9x = new Array\u003Cem\u003EList\u003C\u002Fem\u003E();\u002F\u002F保存读取出来的WIN9X\t\t\n\t\tprivate Array\u003Cem\u003EList\u003C\u002Fem\u003E funwin2k = new Array\u003Cem\u003EList\u003C\u002Fem\u003E();\u002F\u002F保存读取出来的WIN2K\n\n\t\tprivate int nowselect = 0;\n\t\tprivate string oldscoll_\u003Cem\u003Etext\u003C\u002Fem\u003E;\n\t\tprivate int nowtypeselect = 0;\n\t\tprivate string nowpath = @System.Environment.CurrentDirectory+@\"\\\";\n\t\tprivate string dbpassword = \"ling_feng_work\";\n\n\t\tpublic string myConnstr;\n\t\tpublic OleDbConnection myconn ;\u002F\u002F创建一个新连接\n\t\tprivate string mysql ;\u002F\u002F查询语句\n\t\tprivate string sql_update;\n\t\tprivate System.Windows.Forms.Rich\u003Cem\u003EText\u003C\u002Fem\u003EBox tipsmemo;\n\t\tprivate System.Windows.Forms.\u003Cem\u003EText\u003C\u002Fem\u003EBox mat_\u003Cem\u003Etext\u003C\u002Fem\u003E;\n\t\tprivate OleDbCommand mycommand = new OleDbCommand();\n\t\tprivate System.Windows.Forms.Rich\u003Cem\u003EText\u003C\u002Fem\u003EBox codememo;\n\t\tprivate System.Windows.Forms.GroupBox groupBox4;\n\t\tprivate System.Windows.Forms.CheckBox win9x;\n\t\tprivate System.Windows.Forms.GroupBox groupBox5;\n\t\tprivate System.Windows.Forms.CheckBox win2k;\n\t\tprivate System.Windows.Forms.CheckBox e_add;\n\t\tprivate System.Windows.Forms.CheckBox e_modify;\n\t\tprivate System.Windows.Forms.Button b_modify;\n\t\tprivate System.Windows.Forms.Button b_add;\n\t\tprivate System.Windows.Forms.Timer timer1;\n\t\tprivate System.Windows.Forms.ToolTip toolTip1;\n\t\tprivate System.Windows.Forms.Con\u003Cem\u003Etext\u003C\u002Fem\u003EMenu mypop;\n\t\tprivate System.Windows.Forms.MenuItem menuItem1;\n\t\tprivate System.ComponentModel.IContainer components;\n\n\t\tpublic Form1()\n\t\t{\n\t\t\t\u002F\u002F\n\t\t\t\u002F\u002F Windows 窗体设计器支持所必需的\n\t\t\t\u002F\u002F\n\t\t\tInitializeComponent();\n\n\t\t\t\u002F\u002F\n\t\t\t\u002F\u002F TODO: 在 InitializeComponent 调用后添加任何构造函数代码\n\t\t\t\u002F\u002F\n\t\t}\n\n\t\t\u002F\u002F\u002F \n\t\t\u002F\u002F\u002F 清理所有正在使用的资源。\n\t\t\u002F\u002F\u002F \n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif (components != null) \n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Windows 窗体设计器\u003Cem\u003E生成\u003C\u002Fem\u003E的代码\n\t\t\u002F\u002F\u002F \n\t\t\u002F\u002F\u002F 设计器支持所需的方法 - 不要使用代码编辑器修改\n\t\t\u002F\u002F\u002F 此方法的内容。\n\t\t\u002F\u002F\u002F \n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tthis.components = new System.ComponentModel.Container();\n\t\t\tSystem.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));\n\t\t\tthis.button1 = new System.Windows.Forms.Button();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E = new System.Windows.Forms.\u003Cem\u003EList\u003C\u002Fem\u003EBox();\n\t\t\tthis.select_type = new System.Windows.Forms.ComboBox();\n\t\t\tthis.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E = new System.Windows.Forms.\u003Cem\u003EText\u003C\u002Fem\u003EBox();\n\t\t\tthis.mysearch = new System.Windows.Forms.\u003Cem\u003EText\u003C\u002Fem\u003EBox();\n\t\t\tthis.dll\u003Cem\u003Etext\u003C\u002Fem\u003E = new System.Windows.Forms.\u003Cem\u003EText\u003C\u002Fem\u003EBox();\n\t\t\tthis.groupBox2 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.tipsmemo = new System.Windows.Forms.Rich\u003Cem\u003EText\u003C\u002Fem\u003EBox();\n\t\t\tthis.mypop = new System.Windows.Forms.Con\u003Cem\u003Etext\u003C\u002Fem\u003EMenu();\n\t\t\tthis.menuItem1 = new System.Windows.Forms.MenuItem();\n\t\t\tthis.groupBox3 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.codememo = new System.Windows.Forms.Rich\u003Cem\u003EText\u003C\u002Fem\u003EBox();\n\t\t\tthis.b_modify = new System.Windows.Forms.Button();\n\t\t\tthis.b_add = new System.Windows.Forms.Button();\n\t\t\tthis.button4 = new System.Windows.Forms.Button();\n\t\t\tthis.groupBox4 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.win2k = new System.Windows.Forms.CheckBox();\n\t\t\tthis.win9x = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox5 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.e_add = new System.Windows.Forms.CheckBox();\n\t\t\tthis.e_modify = new System.Windows.Forms.CheckBox();\n\t\t\tthis.timer1 = new System.Windows.Forms.Timer(this.components);\n\t\t\tthis.toolTip1 = new System.Windows.Forms.ToolTip(this.components);\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.groupBox2.SuspendLayout();\n\t\t\tthis.groupBox3.SuspendLayout();\n\t\t\tthis.groupBox4.SuspendLayout();\n\t\t\tthis.groupBox5.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F button1\n\t\t\t\u002F\u002F \n\t\t\tthis.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\n\t\t\tthis.button1.Location = new System.Drawing.Point(224, 395);\n\t\t\tthis.button1.Name = \"button1\";\n\t\t\tthis.button1.Size = new System.Drawing.Size(75, 24);\n\t\t\tthis.button1.TabIndex = 10;\n\t\t\tthis.button1.\u003Cem\u003EText\u003C\u002Fem\u003E = \"关 于\";\n\t\t\tthis.button1.Click += new System.EventHandler(this.button1_Click);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F groupBox1\n\t\t\t\u002F\u002F \n\t\t\tthis.groupBox1.Controls.Add(this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E);\n\t\t\tthis.groupBox1.Controls.Add(this.select_type);\n\t\t\tthis.groupBox1.Controls.Add(this.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E);\n\t\t\tthis.groupBox1.Controls.Add(this.mysearch);\n\t\t\tthis.groupBox1.Controls.Add(this.dll\u003Cem\u003Etext\u003C\u002Fem\u003E);\n\t\t\tthis.groupBox1.Location = new System.Drawing.Point(8, 8);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.Size = new System.Drawing.Size(200, 168);\n\t\t\tthis.groupBox1.TabIndex = 1;\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\tthis.groupBox1.\u003Cem\u003EText\u003C\u002Fem\u003E = \"API查询\";\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F tip\u003Cem\u003Elist\u003C\u002Fem\u003E\n\t\t\t\u002F\u002F \n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.ItemHeight = 12;\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.Location = new System.Drawing.Point(8, 43);\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.Name = \"tip\u003Cem\u003Elist\u003C\u002Fem\u003E\";\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.Size = new System.Drawing.Size(184, 110);\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.TabIndex = 1;\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.Visible = false;\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E_KeyDown);\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E_KeyPress);\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.DoubleClick += new System.EventHandler(this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E_DoubleClick);\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.MouseUp += new System.Windows.Forms.MouseEventHandler(this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E_MouseUp);\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.MouseLeave += new System.EventHandler(this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E_MouseLeave);\n\t\t\tthis.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndexChanged += new System.EventHandler(this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E_SelectedIndexChanged);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F select_type\n\t\t\t\u002F\u002F \n\t\t\tthis.select_type.\u003Cem\u003EDropDown\u003C\u002Fem\u003EStyle = System.Windows.Forms.ComboBoxStyle.\u003Cem\u003EDropDown\u003C\u002Fem\u003E\u003Cem\u003EList\u003C\u002Fem\u003E;\n\t\t\tthis.select_type.Items.AddRange(new object[] {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \"API函数查询\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \"常量定义查询\"});\n\t\t\tthis.select_type.Location = new System.Drawing.Point(8, 61);\n\t\t\tthis.select_type.Name = \"select_type\";\n\t\t\tthis.select_type.Size = new System.Drawing.Size(184, 20);\n\t\t\tthis.select_type.TabIndex = 2;\n\t\t\tthis.select_type.SelectedIndexChanged += new System.EventHandler(this.select_type_SelectedIndexChanged);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F mat_\u003Cem\u003Etext\u003C\u002Fem\u003E\n\t\t\t\u002F\u002F \n\t\t\tthis.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n\t\t\tthis.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.Location = new System.Drawing.Point(8, 134);\n\t\t\tthis.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.Name = \"mat_\u003Cem\u003Etext\u003C\u002Fem\u003E\";\n\t\t\tthis.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.Size = new System.Drawing.Size(184, 21);\n\t\t\tthis.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.TabIndex = 4;\n\t\t\tthis.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = \"C#对应函数:\";\n\t\t\tthis.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.MouseDown += new System.Windows.Forms.MouseEventHandler(this.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E_MouseDown);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F mysearch\n\t\t\t\u002F\u002F \n\t\t\tthis.mysearch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n\t\t\tthis.mysearch.Location = new System.Drawing.Point(8, 24);\n\t\t\tthis.mysearch.Name = \"mysearch\";\n\t\t\tthis.mysearch.Size = new System.Drawing.Size(184, 21);\n\t\t\tthis.mysearch.TabIndex = 0;\n\t\t\tthis.mysearch.\u003Cem\u003EText\u003C\u002Fem\u003E = \"\";\n\t\t\tthis.mysearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.mysearch_KeyDown);\n\t\t\tthis.mysearch.MouseDown += new System.Windows.Forms.MouseEventHandler(this.mysearch_MouseDown);\n\t\t\tthis.mysearch.\u003Cem\u003EText\u003C\u002Fem\u003EChanged += new System.EventHandler(this.mysearch_\u003Cem\u003EText\u003C\u002Fem\u003EChanged);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F dll\u003Cem\u003Etext\u003C\u002Fem\u003E\n\t\t\t\u002F\u002F \n\t\t\tthis.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n\t\t\tthis.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.Location = new System.Drawing.Point(8, 97);\n\t\t\tthis.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.Name = \"dll\u003Cem\u003Etext\u003C\u002Fem\u003E\";\n\t\t\tthis.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.Size = new System.Drawing.Size(184, 21);\n\t\t\tthis.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.TabIndex = 3;\n\t\t\tthis.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = \"\";\n\t\t\tthis.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003EChanged += new System.EventHandler(this.dll\u003Cem\u003Etext\u003C\u002Fem\u003E_\u003Cem\u003EText\u003C\u002Fem\u003EChanged);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F groupBox2\n\t\t\t\u002F\u002F \n\t\t\tthis.groupBox2.Controls.Add(this.tipsmemo);\n\t\t\tthis.groupBox2.Location = new System.Drawing.Point(216, 8);\n\t\t\tthis.groupBox2.Name = \"groupBox2\";\n\t\t\tthis.groupBox2.Size = new System.Drawing.Size(200, 168);\n\t\t\tthis.groupBox2.TabIndex = 2;\n\t\t\tthis.groupBox2.TabStop = false;\n\t\t\tthis.groupBox2.\u003Cem\u003EText\u003C\u002Fem\u003E = \"函数注释\";\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F tipsmemo\n\t\t\t\u002F\u002F \n\t\t\tthis.tipsmemo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n\t\t\tthis.tipsmemo.Con\u003Cem\u003Etext\u003C\u002Fem\u003EMenu = this.mypop;\n\t\t\tthis.tipsmemo.Location = new System.Drawing.Point(8, 16);\n\t\t\tthis.tipsmemo.Name = \"tipsmemo\";\n\t\t\tthis.tipsmemo.Size = new System.Drawing.Size(184, 144);\n\t\t\tthis.tipsmemo.TabIndex = 0;\n\t\t\tthis.tipsmemo.\u003Cem\u003EText\u003C\u002Fem\u003E = \"\";\n\t\t\tthis.tipsmemo.MouseEnter += new System.EventHandler(this.rich\u003Cem\u003EText\u003C\u002Fem\u003EBox1_MouseEnter);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F mypop\n\t\t\t\u002F\u002F \n\t\t\tthis.mypop.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t this.menuItem1});\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F menuItem1\n\t\t\t\u002F\u002F \n\t\t\tthis.menuItem1.Index = 0;\n\t\t\tthis.menuItem1.\u003Cem\u003EText\u003C\u002Fem\u003E = \"复制信息\";\n\t\t\tthis.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F groupBox3\n\t\t\t\u002F\u002F \n\t\t\tthis.groupBox3.Controls.Add(this.codememo);\n\t\t\tthis.groupBox3.Location = new System.Drawing.Point(8, 221);\n\t\t\tthis.groupBox3.Name = \"groupBox3\";\n\t\t\tthis.groupBox3.Size = new System.Drawing.Size(408, 168);\n\t\t\tthis.groupBox3.TabIndex = 3;\n\t\t\tthis.groupBox3.TabStop = false;\n\t\t\tthis.groupBox3.\u003Cem\u003EText\u003C\u002Fem\u003E = \"代码调用\";\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F codememo\n\t\t\t\u002F\u002F \n\t\t\tthis.codememo.Con\u003Cem\u003Etext\u003C\u002Fem\u003EMenu = this.mypop;\n\t\t\tthis.codememo.Location = new System.Drawing.Point(8, 16);\n\t\t\tthis.codememo.Name = \"codememo\";\n\t\t\tthis.codememo.Size = new System.Drawing.Size(392, 144);\n\t\t\tthis.codememo.TabIndex = 0;\n\t\t\tthis.codememo.\u003Cem\u003EText\u003C\u002Fem\u003E = \"\";\n\t\t\tthis.codememo.\u003Cem\u003EText\u003C\u002Fem\u003EChanged += new System.EventHandler(this.codememo_\u003Cem\u003EText\u003C\u002Fem\u003EChanged);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F b_modify\n\t\t\t\u002F\u002F \n\t\t\tthis.b_modify.Enabled = false;\n\t\t\tthis.b_modify.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\n\t\t\tthis.b_modify.Location = new System.Drawing.Point(120, 395);\n\t\t\tthis.b_modify.Name = \"b_modify\";\n\t\t\tthis.b_modify.Size = new System.Drawing.Size(75, 24);\n\t\t\tthis.b_modify.TabIndex = 4;\n\t\t\tthis.b_modify.\u003Cem\u003EText\u003C\u002Fem\u003E = \"修改信息\";\n\t\t\tthis.b_modify.Click += new System.EventHandler(this.button2_Click);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F b_add\n\t\t\t\u002F\u002F \n\t\t\tthis.b_add.Enabled = false;\n\t\t\tthis.b_add.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\n\t\t\tthis.b_add.Location = new System.Drawing.Point(16, 395);\n\t\t\tthis.b_add.Name = \"b_add\";\n\t\t\tthis.b_add.Size = new System.Drawing.Size(75, 24);\n\t\t\tthis.b_add.TabIndex = 5;\n\t\t\tthis.b_add.\u003Cem\u003EText\u003C\u002Fem\u003E = \"添加新项\";\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F button4\n\t\t\t\u002F\u002F \n\t\t\tthis.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\n\t\t\tthis.button4.Location = new System.Drawing.Point(328, 395);\n\t\t\tthis.button4.Name = \"button4\";\n\t\t\tthis.button4.Size = new System.Drawing.Size(75, 24);\n\t\t\tthis.button4.TabIndex = 6;\n\t\t\tthis.button4.\u003Cem\u003EText\u003C\u002Fem\u003E = \"退 出\";\n\t\t\tthis.button4.Click += new System.EventHandler(this.button4_Click);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F groupBox4\n\t\t\t\u002F\u002F \n\t\t\tthis.groupBox4.Controls.Add(this.win2k);\n\t\t\tthis.groupBox4.Controls.Add(this.win9x);\n\t\t\tthis.groupBox4.Location = new System.Drawing.Point(8, 176);\n\t\t\tthis.groupBox4.Name = \"groupBox4\";\n\t\t\tthis.groupBox4.Size = new System.Drawing.Size(200, 40);\n\t\t\tthis.groupBox4.TabIndex = 11;\n\t\t\tthis.groupBox4.TabStop = false;\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F win2k\n\t\t\t\u002F\u002F \n\t\t\tthis.win2k.Location = new System.Drawing.Point(104, 11);\n\t\t\tthis.win2k.Name = \"win2k\";\n\t\t\tthis.win2k.Size = new System.Drawing.Size(80, 24);\n\t\t\tthis.win2k.TabIndex = 1;\n\t\t\tthis.win2k.\u003Cem\u003EText\u003C\u002Fem\u003E = \"支持win2k\";\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F win9x\n\t\t\t\u002F\u002F \n\t\t\tthis.win9x.Location = new System.Drawing.Point(16, 11);\n\t\t\tthis.win9x.Name = \"win9x\";\n\t\t\tthis.win9x.TabIndex = 0;\n\t\t\tthis.win9x.\u003Cem\u003EText\u003C\u002Fem\u003E = \"支持win9x\";\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F groupBox5\n\t\t\t\u002F\u002F \n\t\t\tthis.groupBox5.Controls.Add(this.e_add);\n\t\t\tthis.groupBox5.Controls.Add(this.e_modify);\n\t\t\tthis.groupBox5.Location = new System.Drawing.Point(216, 176);\n\t\t\tthis.groupBox5.Name = \"groupBox5\";\n\t\t\tthis.groupBox5.Size = new System.Drawing.Size(200, 40);\n\t\t\tthis.groupBox5.TabIndex = 12;\n\t\t\tthis.groupBox5.TabStop = false;\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F e_add\n\t\t\t\u002F\u002F \n\t\t\tthis.e_add.Location = new System.Drawing.Point(112, 10);\n\t\t\tthis.e_add.Name = \"e_add\";\n\t\t\tthis.e_add.Size = new System.Drawing.Size(80, 24);\n\t\t\tthis.e_add.TabIndex = 5;\n\t\t\tthis.e_add.\u003Cem\u003EText\u003C\u002Fem\u003E = \"允许添加\";\n\t\t\tthis.e_add.CheckedChanged += new System.EventHandler(this.e_add_CheckedChanged);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F e_modify\n\t\t\t\u002F\u002F \n\t\t\tthis.e_modify.Location = new System.Drawing.Point(16, 10);\n\t\t\tthis.e_modify.Name = \"e_modify\";\n\t\t\tthis.e_modify.Size = new System.Drawing.Size(76, 24);\n\t\t\tthis.e_modify.TabIndex = 4;\n\t\t\tthis.e_modify.\u003Cem\u003EText\u003C\u002Fem\u003E = \"允许修改\";\n\t\t\tthis.e_modify.CheckedChanged += new System.EventHandler(this.e_modify_CheckedChanged);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F timer1\n\t\t\t\u002F\u002F \n\t\t\tthis.timer1.Interval = 500;\n\t\t\tthis.timer1.Tick += new System.EventHandler(this.timer1_Tick);\n\t\t\t\u002F\u002F \n\t\t\t\u002F\u002F Form1\n\t\t\t\u002F\u002F \n\t\t\tthis.AutoScaleBaseSize = new System.Drawing.Size(6, 14);\n\t\t\tthis.ClientSize = new System.Drawing.Size(424, 429);\n\t\t\tthis.Controls.Add(this.groupBox5);\n\t\t\tthis.Controls.Add(this.groupBox4);\n\t\t\tthis.Controls.Add(this.button4);\n\t\t\tthis.Controls.Add(this.b_add);\n\t\t\tthis.Controls.Add(this.b_modify);\n\t\t\tthis.Controls.Add(this.groupBox3);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.button1);\n\t\t\tthis.Controls.Add(this.groupBox2);\n\t\t\tthis.Icon = ((System.Drawing.Icon)(resources.GetObject(\"$this.Icon\")));\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.Name = \"Form1\";\n\t\t\tthis.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\n\t\t\tthis.\u003Cem\u003EText\u003C\u002Fem\u003E = \"API精灵FOR C#\";\n\t\t\tthis.Load += new System.EventHandler(this.Form1_Load);\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox2.ResumeLayout(false);\n\t\t\tthis.groupBox3.ResumeLayout(false);\n\t\t\tthis.groupBox4.ResumeLayout(false);\n\t\t\tthis.groupBox5.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\t\u002F\u002F\u002F \n\t\t\u002F\u002F\u002F 应用程序的主入口点。\n\t\t\u002F\u002F\u002F \n\t\t[STAThread]\n\t\t\t\n\t\tstatic void Main() \n\t\t{\n\t\t\tApplication.Run(new Form1());\n\t\t}\n\t\t[DllImport(\"user32.dll\", EntryPoint=\"ShowWindow\")]\n\t\tpublic static extern int ShowWindow (\n\t\t\tint hwnd,\n\t\t\tint nCmdShow\n\t\t\t);\n\t\tprivate void button1_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tAboutForm myabout = new AboutForm();\n\t\t\tmyabout.ShowDialog();\n\t\t}\n\t\t\u002F\u002F\u002F \n\t\t\u002F\u002F\u002F 填写mysearch中的内容。\n\t\t\u002F\u002F\u002F \n\t\tprivate void search_comp()\t\t\n\t\t{\n\t\t\tif (tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex\u003E-1)\n\t\t\tmysearch.\u003Cem\u003EText\u003C\u002Fem\u003E = tip\u003Cem\u003Elist\u003C\u002Fem\u003E.\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E.ToString();\n\t\t\ttip\u003Cem\u003Elist\u003C\u002Fem\u003E.Visible = false ;\n\t\t\tmysearch.Select();\n\t\t}\n\t\t\n\t\t\u002F\u002F\u002F \n\t\t\u002F\u002F\u002F 自动填写提示内容。\n\t\t\u002F\u002F\u002F \n\t\tprivate void autocomp()\n\t\t{\n\t\t\tif (tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex\u003E-1)\n\t\t\ttry\n\t\t\t{\n \n\t\t\t\tif (this.nowtypeselect==0)\n\t\t\t\t\t\u002F\u002F================查询函数\n\t\t\t\t{\n\t\t\t\t\tthis.nowselect = tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex;\n\t\t\t\t\tdll\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = fundll[tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex].ToString();\u002F\u002Felse \n\t\t\t\t\ttipsmemo.\u003Cem\u003EText\u003C\u002Fem\u003E = funtips[tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex].ToString();\n\t\t\t\t\tcodememo.\u003Cem\u003EText\u003C\u002Fem\u003E = funcode[tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex].ToString();\n\t\t\t\t\tmat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = funmat[tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex].ToString();\n\n\t\t\t\t\t\n\n\t\t\t\t\tthis.oldscoll_\u003Cem\u003Etext\u003C\u002Fem\u003E = mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E;\n\t\t\t\t\tif (funwin9x[tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex].ToString()==(\"Yes\")) win9x.Checked=true; \n\t\t\t\t\telse win9x.Checked=false;\n\t\t\t\t\tif (funwin2k[tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex].ToString()==(\"Yes\")) win2k.Checked=true; \n\t\t\t\t\telse win2k.Checked=false;\n\t\t\t\t\t\u002F\u002F滚动文字\n\t\t\t\t\tif (mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003ELength\u003E30) timer1.Enabled = true; else timer1.Enabled = false;\t\t\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\t \n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tdll\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = \"\";\n\t\t\t\t\ttipsmemo.\u003Cem\u003EText\u003C\u002Fem\u003E = \"\";\n\t\t\t\t\tcodememo.\u003Cem\u003EText\u003C\u002Fem\u003E = \"\";\t\n\t\t\t\t\twin9x.Checked = false;\n\t\t\t\t\twin2k.Checked = false;\n\t\t\t\t} \n\t\t\t\t \t\t\t\n\t\t \u002F\u002F********************\n\t\t\t\tif (this.nowtypeselect==1)\t \t\t\t\t\n\t\t\t\t{\n\t\t\t\t\tthis.nowselect = tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex;\t\t\t\t\n\t\t\t\t\tcodememo.\u003Cem\u003EText\u003C\u002Fem\u003E = funcode[tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex].ToString();\t\t\t\t\n\t\t\t\t} \t\t\t\t\n\t\t\t\n\t\t\t\u002F\u002F********************\n\t\t\t\u002F\u002F=================\t\n\n\t\t\n\n\n\n\t\t\t}\t\n\t\t\tcatch\n\t\t\t{\n\t\t\t\tdll\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = \"没有找到相应连接库\";\n\t\t\t\ttipsmemo.\u003Cem\u003EText\u003C\u002Fem\u003E = \"没有找到相应提示\";\n\t\t\t\tcodememo.\u003Cem\u003EText\u003C\u002Fem\u003E = \"没有找到相应调用代码\";\n\t\t\t\tmat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = \"没有找到相应C#函数\";\n\t\t\t}\n\t\t}\n\t\t\u002F\u002F\n\t\t\u002F\u002F\u002F \n\t\t\u002F\u002F\u002F 手动释放一些内存。\n\t\t\u002F\u002F\u002F \n\t\tprivate void mydisp()\n\t\t{\n\t\t tipsmemo.Clear();\n\t\t codememo.Clear();\n\t tip\u003Cem\u003Elist\u003C\u002Fem\u003E.Items.Clear();\n\t\t\u002F\u002F\t=====\n\t\tfundll.Clear();\u002F\u002F保存读取出来的DLL内容\n\t\tfuntips.Clear();\u002F\u002F保存读取出来的中文提示信息\n\t\tfuncode.Clear();\u002F\u002F保存读取出来的C#调用代码\t\t\n funmat.Clear();\u002F\u002F保存读取出来的C#对应函数\n\t\tfunwin9x.Clear();\u002F\u002F保存读取出来的WIN9X\t\t\n\t\tfunwin2k.Clear();\u002F\u002F保存读取出来的WIN2K\t\t\n\n\t\t}\n\n\t\t\n\n\t\tprivate void mysearch_\u003Cem\u003EText\u003C\u002Fem\u003EChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\ttip\u003Cem\u003Elist\u003C\u002Fem\u003E.Visible = true ;\t\t \n\t\t\t\u002F\u002F自动完成功能。\n\t\t\ttip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex = (tip\u003Cem\u003Elist\u003C\u002Fem\u003E.FindString(mysearch.\u003Cem\u003EText\u003C\u002Fem\u003E,-1)) ;\u002F\u002F加上这句,保证TIP\u003Cem\u003ELIST\u003C\u002Fem\u003E跟着自动变化\n\t\t\tnowselect = tip\u003Cem\u003Elist\u003C\u002Fem\u003E.SelectedIndex;\n\t\t autocomp();\t\t\n\t\t\t\u002F\u002F设置提示信息\n\t\t\tmytips();\n\t\t \n\t\t}\n\n\t\tprivate void mysearch_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)\n\t\t{\n\t\t\tif ((e.KeyCode == Keys.Down) || (e.KeyCode == Keys.Up)) tip\u003Cem\u003Elist\u003C\u002Fem\u003E.Focus();\n\t\t\n\t\t\tif (e.KeyCode == Keys.Enter) \n\t\t\t{\n\t\t\t\tsearch_comp();\n\t\t\t\tif (this.nowtypeselect==0)\n\t\t\t\tmykeyword();\n\t\t\t\tif (this.nowtypeselect==1)\n mykeyword1();\n\n\t\t\t}\t\n\n\n\t\t\tif (e.KeyCode == Keys.Escape)\n\t\t\t{\n\t\t\t\ttip\u003Cem\u003Elist\u003C\u002Fem\u003E.Visible = false ;\n\n\t\t\t\n\t\t\t}\n\t\t}\n\n\t\tprivate void tip\u003Cem\u003Elist\u003C\u002Fem\u003E_MouseLeave(object sender, System.EventArgs e)\n\t\t{\n\t\t\t\n\t\t}\n\n\t\tprivate void tip\u003Cem\u003Elist\u003C\u002Fem\u003E_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)\n\t\t{\n\t\t\t\n\t\t}\n\n\t\tprivate void tip\u003Cem\u003Elist\u003C\u002Fem\u003E_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)\n\t\t{\n\t\t\tif (e.KeyCode == Keys.Enter) \n\t\t\t{\t\t\t\n\t\t\t\tthis.search_comp();\n\t\t\t\tif (this.nowtypeselect==0)\n\t\t\t\tmykeyword(); else mykeyword1();\n\t\t\t}\n\t\t\tif (e.KeyCode == Keys.Escape)\n\t\t\t{\n\t\t\t tip\u003Cem\u003Elist\u003C\u002Fem\u003E.Visible = false ;\n\t\t\t\n\t\t\t}\n\t\t}\n\n\t\tprivate void tip\u003Cem\u003Elist\u003C\u002Fem\u003E_DoubleClick(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis.search_comp();\n\t\t\tif (this.nowtypeselect==0)\n\t\t\t\tmykeyword(); else mykeyword1();\n\n\t\t}\n\n\t\tprivate void Form1_Load(object sender, System.EventArgs e)\n\t\t{\n\t\t\t\u002F\u002F初始化数据库\n\t\t\tinitdatabase();\n\t\t\t\u002F\u002FMessageBox.Show(this,\"欢迎使用 共享版\\n 本版对使用功能上略有限制\\n 且不提供数据库更新!\\n 如想\u003Cem\u003E获得\u003C\u002Fem\u003E更多信息请与我联系。\\n dong_teng@tom.com\",\"提示\",MessageBoxButtons.OK,MessageBoxIcon.Information);\n\t\t\tselect_type.SelectedIndex = 0;\t\t\t\n AboutForm myabout = new AboutForm();\n\t\t\tmyabout.ShowDialog();\n\n\t\t}\n\t\t\u002F\u002F\n\t\tprivate void mytips()\n\t\t{\n\t\t\t\u002F\u002F设置提示信息\n\t\t\tif ((this.nowselect\u003E-1)&(this.nowtypeselect==0))\n\t\t\t{\n\t\t\t\ttoolTip1.SetToolTip(this.dll\u003Cem\u003Etext\u003C\u002Fem\u003E,\"所在\u003Cem\u003E动态\u003C\u002Fem\u003E连接库: \"+this.fundll[this.nowselect].ToString());\n\t\t\t\ttoolTip1.SetToolTip(this.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E,\"在C#中对应的函数: \"+this.funmat[this.nowselect].ToString());\n\t\t\t\ttoolTip1.SetToolTip(this.codememo,\"函数 \"+this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E.ToString()+\" 在C#中的调用代码,可以手动修改\");\n\t\t\t\ttoolTip1.SetToolTip(this.tipsmemo,\"函数 \"+this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E.ToString()+\" 的注释信息,可以手动修改\");\n\t\t\t} else if ((this.nowselect\u003E-1)&(this.nowtypeselect==1))\n\t\t\t{\t\t\t\t\n\t\t\t\ttoolTip1.SetToolTip(this.codememo,\"常量 \"+this.tip\u003Cem\u003Elist\u003C\u002Fem\u003E.\u003Cem\u003ESelectedItem\u003C\u002Fem\u003E.ToString()+\" 在C#中的调用代码\");\n\t\t\t\ttoolTip1.SetToolTip(this.dll\u003Cem\u003Etext\u003C\u002Fem\u003E,\"没有相关信息\");\n\t\t\t\ttoolTip1.SetToolTip(this.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E,\"没有相关信息\");\n\t\t\t\ttoolTip1.SetToolTip(this.tipsmemo,\"没有相关信息\");\n\t\t\t\t\n\t\t\t} \n\t\t}\n\t\t\u002F\u002F\n\t\tprivate void initdatabase()\n\t\t{\n\t string dbpath = @nowpath+\"winapi.mdb\";\t\t\t\n\t\t\ttip\u003Cem\u003Elist\u003C\u002Fem\u003E.Items.Clear();\t\n\t\t\n \n \u002F\u002F@\"Provider=Microsoft.Jet.OleDB.4.0;Data Source=\"+dbpath+\";User Id=admin;Password=\"+this.dbpassword ;\n\n\t\t\t\u002F\u002F\"Provider=Microsoft.Jet.OleDB.4.0;Data Source=your mdb filename;Jet OLEDB:Database Password='pass'\" ;\t\t\t\n\n\t\t\tthis.myConnstr = @\"Provider=Microsoft.Jet.OleDB.4.0;Data Source=\"+dbpath+\";User Id=admin;Jet OLEDB:Database Password=\"+this.dbpassword ;\t\t\t\n\t\t\tthis.myconn= new OleDbConnection(myConnstr);\t\t\t\n \t\t mysql= @\"select Fun_name,Fun_dll,Fun_tips,Fun_code,Fun_com,win9x,win2k from winapi\";\n\n\t\t\t\n\t\t\t\n\t\tusing(myconn)\n\t\t\t{\n\t\t\t\tmyconn.Open();\n\t\t\t\u002F\u002F if (myconn.State.ToString() == \"Open\") MessageBox.Show(\"打开成功!\");\n\t\t\t\u002F\u002F数据处理\n\t\t\t \u002F\u002F OleDbCommand mycommand = new OleDbCommand(mysql,myconn);\n\t\t\t \n\t\t\t mycommand.Command\u003Cem\u003EText\u003C\u002Fem\u003E = mysql;\n\t\t\t mycommand.Connection = myconn; \n\t\t\t OleDbDataReader myreader = mycommand.ExecuteReader();\n\t\t\tint i=0;\n\t\t\twhile (myreader.Read())\n\t\t\t{\n\t\t\t tip\u003Cem\u003Elist\u003C\u002Fem\u003E.Items.Add(myreader[\"Fun_name\"]);\n \n\t\t\t fundll.Add(myreader[\"fun_dll\"].ToString());\n\t\t\t\tfuntips.Add(myreader[\"fun_tips\"].ToString());\n\n\t\t\t\tfuncode.Add(myreader[\"fun_code\"].ToString());\n\t\t\t\tfunmat.Add(myreader[\"fun_com\"].ToString());\n\n\t\t\t\tfunwin9x.Add(myreader[\"win9x\"].ToString());\n\t\t\t\tfunwin2k.Add(myreader[\"win2k\"].ToString());\n\t\t\t\ti++;\n\t\t\t}\n\t\t\t myconn.Close();\n\t\t\t myreader.Close();\n\t\t\t}\n \n\t\t\t }\n\t\t\u002F\u002F更新缓存\n\t\tprivate void memo_update()\n\t\t{\t\t \n\t\t fundll[nowselect] = dll\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E;\n\t\t funtips[nowselect] = this.tipsmemo.\u003Cem\u003EText\u003C\u002Fem\u003E;\n funcode[nowselect] = this.codememo.\u003Cem\u003EText\u003C\u002Fem\u003E;\n funmat[nowselect] = this.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E;\n\n\t\t\tif (win9x.Checked) funwin9x[nowselect]=\"Yes\" ;else funwin9x[nowselect]=\"No\"; \n\t\t\tif (win2k.Checked) funwin2k[nowselect]=\"Yes\" ;else funwin2k[nowselect]=\"No\"; \n\t\t}\n\t\t\u002F\u002F\n\n\t\tprivate void oleDbConnection1_InfoMessage(object sender, System.Data.OleDb.OleDbInfoMessageEventArgs e)\n\t\t{\n\t\t\n\t\t}\n\u002F\u002F==============从WINAPI.TXT读取CONST并拆分\n\t\tprivate void mysplip()\n\t\t{\t\t\n\t\t\t\u002F\u002Fstring dbpath = @System.Environment.CurrentDirectory+@\"\\winapi.mdb\";\n\t\t\tstring filename =@nowpath +\"winapi.txt\";\n\t\t\tstring nextline;\n\t\t\ttip\u003Cem\u003Elist\u003C\u002Fem\u003E.Items.Clear();\t\t \n StreamReader sr = new StreamReader(filename);\t\t\t\n\t\t\twhile ((nextline = sr.ReadLine())!=null)\n\t\t\t{\n\t\t\t\tif (nextline.StartsWith(\"public const\"))\n\t\t\t\t{\n\t\t\t\t\tstring[] ss = nextline.Split('=');\t\t\t\t\t\n\t\t\t\t\ttip\u003Cem\u003Elist\u003C\u002Fem\u003E.Items.Add(ss[0].Substring(16).Trim());\t\t\n\t\t\t\t\tfuncode.Add(nextline);\n\t\t\t\t}\n\t\t\t}\n\t\t\tsr.Close();\n\t\t\t\n\t\t}\n\u002F\u002F==============================\n\t\tprivate void select_type_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (select_type.SelectedIndex != this.nowtypeselect)\n\t\t\t{\n\t\t\t\tthis.mydisp();\t\t\t\t\n\t\t\t\tswitch (select_type.SelectedIndex)\n\t\t\t\t{\n\t\t\t\t\tcase 0:initdatabase();this.nowtypeselect=select_type.SelectedIndex;break;\n\t\t \tcase 1:mysplip();this.nowtypeselect=select_type.SelectedIndex;this.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.Clear();this.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.Clear();break;\n\t\t\t\t}\n\t\t\t\tisenable(this.nowtypeselect);\n\t\t\t \n\t\t\t}\n\t\t}\n\n\t\tprivate void dll\u003Cem\u003Etext\u003C\u002Fem\u003E_\u003Cem\u003EText\u003C\u002Fem\u003EChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\t\n\t\t}\n\n\t\tprivate void rich\u003Cem\u003EText\u003C\u002Fem\u003EBox1_MouseEnter(object sender, System.EventArgs e)\n\t\t{\n\t\t\ttip\u003Cem\u003Elist\u003C\u002Fem\u003E.Visible = false ;\n\t\t\t\n\t\t}\n\n\t\tprivate void mysearch_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)\n\t\t{\n\t\t\ttip\u003Cem\u003Elist\u003C\u002Fem\u003E.Visible = false ;\n\t\t\tmysearch.Focus();\n\t\t}\n\n\t\tprivate void tip\u003Cem\u003Elist\u003C\u002Fem\u003E_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tautocomp();\n\t\t}\n\t\t\u002F\u002F\u002F \n\t\t\u002F\u002F\u002F 修改内容。\n\t\t\u002F\u002F\u002F \n\t\tprivate void fun_update()\n\t\t{\n\t\t\tusing(myconn)\n\t\t\t{\n\t\t\t\tmyconn.ConnectionString = myConnstr;\n\t\t\t\tmyconn.Open();\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\t\u002F\u002Fif (myconn.State.ToString() == \"Open\") MessageBox.Show(\"打开成功!\");\n\t\t\t\t\tisnull();\u002F\u002F判断是否有无效\u003Cem\u003E值\u003C\u002Fem\u003E\n\t\t\t\t\tstring str_win9x,str_win2k;\n\t\t\t\t\tif (win9x.Checked) str_win9x = \"Yes\" ; else str_win9x = \"No\"; \n\t\t\t\t\tif (win2k.Checked) str_win2k = \"Yes\" ; else str_win2k = \"No\";\n\t\t\t\t\tsql_update = \"update winapi set Fun_dll = '\"+dll\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E+\"'\"+\" , Fun_tips = '\"+tipsmemo.\u003Cem\u003EText\u003C\u002Fem\u003E+\"'\"+\" , Fun_code = '\"+codememo.\u003Cem\u003EText\u003C\u002Fem\u003E+\"'\"+\" , Fun_com ='\"+mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E+\"' \";\n\t\t\t\t\tsql_update +=\" , win9x = '\" + str_win9x +\"' \" + \", win2k = '\" + str_win2k+\"' \"; \n\t\t\t\t\tsql_update +=\" where Fun_name ='\"+ mysearch.\u003Cem\u003EText\u003C\u002Fem\u003E+\"'\";\n\t\t\t\t\tmycommand.Connection = myconn;\n\t\t\t\t\tmycommand.Command\u003Cem\u003EText\u003C\u002Fem\u003E = sql_update;\n\t\t\t\t\tmycommand.ExecuteNonQuery();\t\t\t\t\n\t\t\t\t\tmyconn.Close();\n\t\t\t\t\tmemo_update();\n MessageBox.Show(this,\"恭喜!更新成功!\",\"提示\",MessageBoxButtons.OK,MessageBoxIcon.Information);\n\t\t\t\t}\n\t\t\t\tcatch\n\t\t\t\t{\n\t\t\t\t\u002F\u002F\ttipsmemo.\u003Cem\u003EText\u003C\u002Fem\u003E = sql_update;\n\t\t\t\tMessageBox.Show(\"没有找到相应记录,更新失败!\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t\u002F\u002F判断是更新的部分是否有效(不能为空)\n\t\tprivate void isnull()\n\t\t{\n\t\t if (this.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E==\"\") this.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E=\"没有相关信息\";\n\t\t\tif (this.codememo.\u003Cem\u003EText\u003C\u002Fem\u003E==\"\") this.codememo.\u003Cem\u003EText\u003C\u002Fem\u003E=\"没有相关信息\";\n\t\t\tif (this.tipsmemo.\u003Cem\u003EText\u003C\u002Fem\u003E==\"\") this.tipsmemo.\u003Cem\u003EText\u003C\u002Fem\u003E=\"没有相关信息\";\n\t\t\tif (this.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E==\"\") this.dll\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E=\"没有相关信息\";\t\t\t\n\t\t}\n\t\t\u002F\u002F关键字高亮显示\n\t\tprivate void mykeyword()\n\t\t{\t\t\t\t\t\n\t\tstring[] keywords = new string[5];\t\n\t\t\t keywords[0]=mysearch.\u003Cem\u003EText\u003C\u002Fem\u003E;\n\t\t\t\tkeywords[1]=\"string\";\n\t\t\t\tkeywords[2]=\"ref\";\n\t\t\t\tkeywords[3]=\"int\";\t\n\t\t\t\tkeywords[4]=\"static extern\";\t\t\n\t\t\tfor(int i=0;i0)\n\t\t\t\t{\n\t\t\t\t\tindex++;\n\t\t\t\t\tswitch(i)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase 0: codememo.SelectionColor = Color.Red;break;\n\t\t\t\t\t\tcase 1: codememo.SelectionColor = Color.Green;break;\n\t\t\t\t\t\tcase 2: codememo.SelectionColor = Color.Brown;break;\n\t\t\t\t\t\tcase 3: codememo.SelectionColor = Color.Blue;break;\n\t\t\t\t\t\tcase 4: codememo.SelectionColor = Color.Green;break;\t\t\t\t\t\t \n\t\t\t\t\t\t\u002F\u002Fdefault:codememo.SelectionColor = Color.Blue;break;\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n \n\t\t}\n\t\t\u002F\u002F\n\t\t\u002F\u002FCONST中关键字高亮显示\n\t\tprivate void mykeyword1()\n\t\t{\t\t\t\t\t\n\t\t\tstring[] keywords = new string[5];\t\n\t\t\tkeywords[0]=mysearch.\u003Cem\u003EText\u003C\u002Fem\u003E;\n\t\t\tkeywords[1]=\"=\";\n\t\t\tkeywords[2]=\"0\";\n\t\t\tkeywords[3]=\"int\";\t\n\t\t\tkeywords[4]=\"const\";\t\t\n\t\t\tfor(int i=0;i0)\n\t\t\t\t{\n\t\t\t\t index++;\n\t\t\t\t\tswitch(i)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase 0: codememo.SelectionColor = Color.Red;break;\n\t\t\t\t\t\tcase 1: codememo.SelectionColor = Color.Blue;break;\n\t\t\t\t\t\tcase 2: codememo.SelectionColor = Color.Green;break;\n\t\t\t\t\t\tcase 3: codememo.SelectionColor = Color.Blue;break;\n\t\t\t\t\t\tcase 4: codememo.SelectionColor = Color.Green;break;\t\t\t\t\t\t \n\t\t\t\t\t\t\t\u002F\u002Fdefault:codememo.SelectionColor = Color.Blue;break;\t\t\t\t\t\t\t\n\t\t\t\t\t}\n if (index\u003Ecodememo.\u003Cem\u003EText\u003C\u002Fem\u003ELength) break;\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n \n\t\t}\n\t\t\u002F\u002F\n\n\t\tprivate void button2_Click(object sender, System.EventArgs e)\n\t\t{ \n\t\t\t\n\t\t\tthis.fun_update();\n\t\t}\n\n\t\tprivate void isenable(int i_temp)\n\t\t{\n\t\t\tif (i_temp==0)\n\t\t\t{\nwin9x.Enabled=true;\nwin2k.Enabled=true;\ne_modify.Enabled=true;\ne_add.Enabled=true;\nb_modify.Enabled=true;\nb_add.Enabled=true;\n\t\t\t} else\n\t\t\t{\n\t\t\t\twin9x.Enabled=false;\n\t\t\t\twin2k.Enabled=false;\n\t\t\t\te_modify.Enabled=false;\n\t\t\t\te_add.Enabled=false;\n\t\t\t\tb_modify.Enabled=false;\n\t\t\t\tb_add.Enabled=false;\n\t\t\t}\n\t\t\t\n\n\t\t}\n\n\t\tprivate void button4_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tApplication.Exit();\n\t\t}\n\n\t\tprivate void e_modify_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (e_modify.Checked) b_modify.Enabled = true; else b_modify.Enabled = false;\n\t\t}\n\n\t\tprivate void e_add_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (e_add.Checked) b_add.Enabled = true; else b_add.Enabled = false;\n\t\t}\n\n\t\tprivate void timer1_Tick(object sender, System.EventArgs e)\n\t\t{\n\t\t\t\n\t\t\tif (this.mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003ELength\u003E0) \n\t\t\t\tmat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = mat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E.Remove(0,1); else \n\t\t\t\tmat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = oldscoll_\u003Cem\u003Etext\u003C\u002Fem\u003E;\n\t\t}\n\n\t\tprivate void mat_\u003Cem\u003Etext\u003C\u002Fem\u003E_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)\n\t\t{\n\t\t\ttimer1.Enabled = false ;\n\t\t\tmat_\u003Cem\u003Etext\u003C\u002Fem\u003E.\u003Cem\u003EText\u003C\u002Fem\u003E = oldscoll_\u003Cem\u003Etext\u003C\u002Fem\u003E;\n\t\t}\n\n\t\tprivate void codememo_\u003Cem\u003EText\u003C\u002Fem\u003EChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\t \n\t\t}\n\n\t\tprivate void tip\u003Cem\u003Elist\u003C\u002Fem\u003E_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)\n\t\t{\n\t\t\t\n\t\t}\n\n\t\tprivate void menuItem1_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tControl ct = this.ActiveControl;\n\t\t\tstring temp = ct.\u003Cem\u003EText\u003C\u002Fem\u003E;\n\t\t\tClipboard.SetDataObject(temp);\n\n\n\t\t}\n\n\t\tprivate void menuItem2_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\t\n\t\t}\n\n\t}\n}","createTime":"2009-11-01 08:37:02","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"5\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Ftianzhu131\u002F1785804\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"5\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Ftianzhu131\u002F1785804\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-1785804-bbs-50095443.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713982881219_78446\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"}],"staffDOList":[{"id":null,"communityId":211,"username":"community_93","userNickname":"ASP.NET","roleCode":1,"status":1,"createUsername":"","updateUsername":"","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","createTime":"2021-05-12 18:07:05","updateTime":"2021-05-12 18:07:05","lastLoginTime":"2021-05-12 18:07:05"},{"id":null,"communityId":211,"username":"dotnetconf","userNickname":".Net开发者社区","roleCode":2,"status":1,"createUsername":"community_93","updateUsername":"","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","createTime":"2022-12-01 00:26:57","updateTime":"2022-12-01 00:26:57","lastLoginTime":"2022-12-01 00:26:57"},{"id":null,"communityId":211,"username":"weixin_41960540","userNickname":"R小R","roleCode":2,"status":1,"createUsername":"community_93","updateUsername":"","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Faa17748a52c84d88ba031f9895a4ea32_weixin_41960540.jpg!1","createTime":"2022-04-16 21:18:57","updateTime":"2022-04-16 21:18:57","lastLoginTime":"2022-04-16 21:18:57"}],"communityConfig":{"scoreType":0,"scoreItems":{"0":"给本帖投票","1":"锋芒小试,眼前一亮","2":"潜力巨大,未来可期","3":"持续贡献,值得关注","4":"成绩优异,大力学习","5":"贡献巨大,全力支持"}},"shouldApply":false,"subscribeAble":false,"operatorAble":false,"commentNeedJoinCommunity":false},"default2014LiveRoom":[{"itemType":"","description":"高峰论坛","title":"2022 技术英雄会","url":"https:\u002F\u002Flive.csdn.net\u002Froom\u002Fiframe\u002Fcsdnnews\u002FfsNR5NWp?chat=1&title=1&footer=1","images":["https:\u002F\u002Fimg-home.csdnimg.cn\u002Fimages\u002F20221016050009.png"],"ext":{"time":"9:00","liveRoomUrl":"https:\u002F\u002Flive.csdn.net\u002Froom\u002Fcsdnnews\u002FfsNR5NWp"}}]},"isGooglebot":false,"canonical":"https:\u002F\u002Fwww.csdn.net\u002Ftopics\u002F50095443","openUrl":"","isApp":false,"localUrl":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F50095443","typeId":"20680","hasIndex":false},"CFG":{"ALIPLAYER_VERSION":"v4","ALIPLAYER_H5_VERSION":"mobile_v1","ENV":"prod","ROOT_URL":"https:\u002F\u002Fcms-mall.csdn.net\u002F","VUE_APP_API_URL_SERVER":"http:\u002F\u002Fcms-community-api.internal.csdn.net\u002F","VUE_APP_API_URL":"https:\u002F\u002Fcms-api.csdn.net\u002F","LOGIN_URL":"https:\u002F\u002Fpassport.csdn.net\u002Faccount\u002Flogin","VUE_APP_DOMAIN_SKILL":"https:\u002F\u002Fedu.csdn.net\u002F","VUE_APP_DOMAIN_PATH":"https:\u002F\u002Fedu.csdn.net\u002F","VUE_APP_COMMUNITY_API_URL":"https:\u002F\u002Fcommunity-api.csdn.net\u002F","VUE_APP_CCLOUD_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002Fcommunity-cloud\u002Fv1\u002F","VUE_APP_SKILL_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002Fskilltree\u002Fapi\u002F","VUE_APP_SEARCH_PLUGIN_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002Fsearchplugin\u002F","VUE_APP_COMMUNITY_ASK_API_URL":"https:\u002F\u002Fmp-ask.csdn.net\u002F","VUE_APP_ME_URL":"https:\u002F\u002Fme.csdn.net\u002F","VUE_APP_CCLOUD_RESUME":"https:\u002F\u002Fbizapi.csdn.net\u002Fjob-api\u002F","VUE_APP_CCLOUD_MAIN":"https:\u002F\u002Fwww.csdn.net\u002F","VUE_APP_CCLOUD_UC":"https:\u002F\u002Fwww.csdn.net\u002F","VUE_APP_CCLOUD_BZP_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002F","VUE_APP_CCLOUD_START_API_URL":"https:\u002F\u002Fmp-action.csdn.net\u002F","VUE_APP_PRACTIVE":"https:\u002F\u002Fbizapi.csdn.net\u002Fdaily-practice\u002F","VUE_APP_CCLOUD_HOSTPATH":"https:\u002F\u002Fbbs.csdn.net\u002F"},"queries":{"pageId":[],"domain":["ccloud.csdn.net\u002Fccloud\u002Fdetail1"],"id":["50095443"],"deviceType":"pc","isSpider":"","hostname":["bbs.csdn.net"]},"basePath":"bbs.csdn.net\u002Fccloud\u002Ftopics\u002F50095443","hrefUrl":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F50095443","active":0,"navBarFixed":false,"title":"动态生成DropDownList控件后,在选择改变时获得DropDownList.SelectedItem.Text的值","isLive":false,"contentType":{"text":"text","picture":"picture","link":"link","video":"video","vote":"vote","live":"live","blog":"blog","long_text":"long_text","task_text":"task_text"},"liveUrl":"https:\u002F\u002Flive.csdn.net\u002Froom\u002Fiframe\u002F","spmExtra":{"id":211,"topicId":50095443},"keywords":"","description":"以下内容是CSDN社区关于动态生成DropDownList控件后,在选择改变时获得DropDownList.SelectedItem.Text的值相关内容,如果想了解更多关于.NET社区社区其他内容,请访问CSDN社区。"};</script><script type="text/javascript" src="https://csdnimg.cn/release/cmsfe/public/js/runtime.3e5c09eb.js"></script><script type="text/javascript" src="https://csdnimg.cn/release/cmsfe/public/js/chunk/common.7672e502.js"></script><script type="text/javascript" src="https://csdnimg.cn/release/cmsfe/public/js/chunk/tpl/ccloud-detail/index.243a94d0.js"></script></body> <!----> <script> window.csdn.sideToolbar = { options: { qr: { isShow: true, data: [ { imgSrc: 'https://csdnimg.cn/release/cmsfe/public/img/ewm.9010d6e5.png', desc: "关注公众号" }, ] }, help: { isShow: false, }, contentEl: document.getElementsByClassName("cloud-maintainer")[0] }, }; </script> <script src="https://g.csdnimg.cn/side-toolbar/2.9/side-toolbar.js" ></script> <!----> <!----> <!----> <script src="https://csdnimg.cn/release/blog_editor_html/release1.7.5/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js"></script> <script src="https://g.csdnimg.cn/lib/editor-page-detail/v2.2.0/js/runDetail.min.js"></script> <!----> <!----> <!----> <!----> <!----> <!----> <script src="https://g.csdnimg.cn/collection-box/2.1.0/collection-box.js"></script> <!----> <!----> <!----> <!----> <script src="https://g.csdnimg.cn/common/csdn-cert/csdn-cert.js"></script> <!----></html>