首页 DevExpress BreadCrumbEdit

DevExpress BreadCrumbEdit

举报
开通vip

DevExpress BreadCrumbEdit面包屑控件DevExpressBreadCrumbEdit开发总结控件类型全称:DevExpress.XtraEditors.BreadCrumbEdit控件命名空间:DevExpress.XtraEditors程序集:DevExpress.XtraEditors.v17.2.dll类继承树:System.ObjectSystem.MarshalByRefObjectSystem.ComponentModel.ComponentSystem.Windows.Forms.ControlControlBaseBaseC...

DevExpress BreadCrumbEdit
面包屑控件DevExpressBreadCrumbEdit开发总结控件类型全称:DevExpress.XtraEditors.BreadCrumbEdit控件命名空间:DevExpress.XtraEditors程序集:DevExpress.XtraEditors.v17.2.dll类继承树:System.ObjectSystem.MarshalByRefObjectSystem.ComponentModel.ComponentSystem.Windows.Forms.ControlControlBaseBaseControlBaseEditTextEditButtonEditPopupBaseEditPopupBaseAutoSearchEditComboBoxEditBreadCrumbEditBreadCrumbEdit控件作为导航条,类似于Windows7的窗口管理器MicrosoftExplorer,如图:这个控件允许开发者创建节点树,每个节点可以关联一个或多个子节点。控件展示当前的节点位置,下图展示了控件展示与节点树当前位置的映射关系:BreadCrumbEdit控件包括以下几个基础概念:(1)节点BreadCrumbEdit控件的基本元素是节点,是类BreadCrumbNode的实例化对象,存储子节点集合BreadCrumbNode.ChildNodes。每个节点有标题、值和图例。节点图例只有在下拉列表中显示。通过属性RepositoryItemBreadCrumbEdit.RootGlyph可以指定根节点的图例,点击根节点图例触发事件RepositoryItemBreadCrumbEdit.RootGlyphClick。(2)路径节点树中的当前位置称为路径,存储于属性BreadCrumbEdit.Path中。路径字符串包括每个节点值,由属性RepositoryItemBreadCrumbEdit.PathSeparator指定的分隔符分开。比如:breadCrumbEdit1.Path="Node1\\Node2\\Node3";程序运行时,路径表现为一系列可点击的节点元素,一个挨着一个排成一行。这些元素显示节点标题,允许用户通过点击返回到当前位置之前的任一节点。如果一个节点包括子节点,则显示一个小箭头,点击该箭头会弹出下拉菜单,点击下拉菜单中菜单项导航至任一子节点。如果下拉菜单列表包含了当前已经选择的节点,则节点标题以字体加粗的形式高亮显示,如图:每个节点的路径字符串通过属性BreadCrumbNode.Path获取,属性值是到达当前节点需要遍历的一系列节点。(3)持久化节点持久化节点是属性BreadCrumbNode.Persistent的值设置为true的节点。持久化节点在导航条的前缀节点,位于其他节点的最前面,具有以下特性:在导航条中永远可见不属于节点树,节点值不在路径字符串中只包括一个层级的子节点集合,可以添加节点到属性BreadCrumbNode.ChildNodes集合中,但添加的该节点不含有子节点当用户点击持久化节点下拉列表中的子节点时,不会导航到子节点,事件RepositoryItemBreadCrumbEdit.PathChanged不会被触发子节点的值可以存储特定的路径字符串,当点击节点时会导航至期望节点,不需要处理事件RepositoryItemBreadCrumbEdit.NodeClick这些特性使持久化节点比一般的面包屑导航节点更像是一个下拉弹出按钮,其主要功能是存储重要节点、频繁访问节点或者特定操作的快捷方式。(4)动态填充节点属性BreadCrumbNode.PopulateOnDemand值设置为true。当用户点击某个节点欲展开子节点时,触发RepositoryItemBreadCrumbEdit.QueryChildNodes事件,在事件中可以动态填充该节点的子节点。(5)验证当导航到一个不存在的节点时(比如传递一系列未知的节点值给控件的路径属性),产生路径校验。该机制使开发者有机会检查路径的有效性,并采取合适的措施,要嘛取消导航,要嘛用当前节点值创建新节点。处理事件RepositoryItemBreadCrumbEdit.ValidatePath,设置e.ValidationResult的值。如果选择创建新节点,将触发事件RepositoryItemBreadCrumbEdit.NewNodeAdding和事件RepositoryItemBreadCrumbEdit.QueryChildNodes,允许动态填充新创建的节点。(6)操作模式BreadcrumbEdit控件有两种操作模式:Select和Edit。(7)历史导航记录在Edit模式下,当用户成功导航至某个节点,该节点的路径则会被控件保存为历史导航记录。在运行时,用户可以点击右边的下拉按钮查看缓存的历史路径、导航到选择的路径,如下图:在代码中访问控件的历史导航记录,使用属性RepositoryItemBreadCrumbEdit.History,这个属性是BreadCrumbHistory集合,保存着BreadCrumbHistoryItem类对象。每一个对象有一个属性BreadCrumbHistoryItem.Path保存着对应节点的路径。控件提供了多个方法通过历史记录导航:BreadCrumbEdit.GoBack,从当前路径导航至上一个BreadCrumbHistoryItemBreadCrumbEdit.GoForward,从当前路径导航至下一个BreadCrumbHistoryItemBreadCrumbEdit.GoUp,从当前节点导航至父节点,该方法与历史记录导航无关用户在节点之间导航,除了通过在编辑模式下输入路径的方法外,还有以下方法:在Select模式下使用鼠标在代码中直接修改控件路径使用持久化节点缓存等通过方法BreadCrumbEdit.GetNavigationHistory,可以获取完整的历史导航记录,该方法返回BreadCrumbHistory集合可以跟踪用户操作控件的每个历史动作。(8)命令按钮默认情况下,BreadCrumbEdit控件自带一个下拉按钮用于查看、访问历史导航记录。开发者可以删除默认按钮,并添加自定义按钮。如下图,通过按钮编辑对话框创建、排列、修改、删除按钮。在代码中,通过控件的BreadCrumbEdit.Properties修改属性RepositoryItemButtonEdit.Buttons。命令按钮由EditorButton类对象表示。设计时创建节点运行时创建节点动态填充节点设置属性Path作为启动路径breadCrumbEdit1.Path="Node1\\Node2\\Node3";验证路径事件privatevoidbreadCrumbEdit1_Properties_ValidatePath(objectsender,DevExpress.XtraEditors.BreadCrumbValidatePathEventArgse){if(e.Path=="Node1\\Node2\\Node3")e.ValidationResult=DevExpress.XtraEditors.BreadCrumbValidatePathResult.CreateNodes;elsee.ValidationResult=DevExpress.XtraEditors.BreadCrumbValidatePathResult.Cancel;}添加新节点事件对于有子节点的节点,需要将节点属性BreadCrumbNode.PopulateOnDemand设置为trueprivatevoidbreadCrumbEdit1_Properties_NewNodeAdding(objectsender,DevExpress.XtraEditors.BreadCrumbNewNodeAddingEventArgse){e.Node.Caption="MyNode1";...e.Node.PopulateOnDemand=true;}展开节点,查看子节点事件privatevoidbreadCrumbEdit1_Properties_QueryChildNodes(objectsender,DevExpress.XtraEditors.BreadCrumbQueryChildNodesEventArgse){switch(e.Node.Caption){case"Node1":e.Node.ChildNodes.Add(newDevExpress.XtraEditors.BreadCrumbNode("NewNode1","newValue1",true));...break;case"Node2":...break;case"Node3":...break;}}静态节点集合breadCrumbEdit1.Properties.Nodes.Clear();BreadCrumbNodenode1=newBreadCrumbNode("RootNode1");BreadCrumbNodenode2=newBreadCrumbNode("RootNode2");BreadCrumbNodenode3=newBreadCrumbNode("RootNode3");BreadCrumbNodenode4=newBreadCrumbNode("ChildNode4");BreadCrumbNodenode5=newBreadCrumbNode("ChildNode5");breadCrumbEdit1.Properties.Nodes.AddRange(newBreadCrumbNode[]{node1});node1.ChildNodes.AddRange(newBreadCrumbNode[]{node2});node2.ChildNodes.AddRange(newBreadCrumbNode[]{node3});node3.ChildNodes.AddRange(newBreadCrumbNode[]{node4,node5});breadCrumbEdit1.Path="RootNode1\\RootNode2\\RootNode3";添加自定义按钮创建按钮EditorButtonbtnBack=newEditorButton(){Kind=ButtonPredefines.Glyph,Caption="Back",Image=DevExpress.Images.ImageResourceCache.Default.GetImage("office2013/navigation/backward_16x16.png"),};EditorButtonbtnAdd=newEditorButton(){Kind=ButtonPredefines.Glyph,Caption="AddtoHistory",Image=DevExpress.Images.ImageResourceCache.Default.GetImage("office2013/actions/add_16x16.png"),};EditorButtonbtnHistory=newEditorButton(){Kind=ButtonPredefines.Glyph,Caption="ShowHistory",Image=DevExpress.Images.ImageResourceCache.Default.GetImage("office2013/history/historyitem_16x16.png"),};添加按钮到按钮集合中breadCrumbEdit1.Properties.Buttons.Clear();breadCrumbEdit1.Properties.Buttons.AddRange(newEditorButton[]{btnBack,btnAdd,btnHistory});处理按钮点击事件breadCrumbEdit1.Properties.ButtonClick+=Properties_ButtonClick;privatevoidProperties_ButtonClick(objectsender,ButtonPressedEventArgse){BreadCrumbEditbCrumb=senderasBreadCrumbEdit;switch(e.Button.Caption){case"Back":bCrumb.GoBack();break;case"AddtoHistory":bCrumb.Properties.History.Add(newDevExpress.XtraEditors.BreadCrumbHistoryItem(bCrumb.Path));bCrumb.ClosePopup();break;case"ShowHistory":bCrumb.ShowPopup();break;}}输出结果常用属性CanGoBackpublicvirtualboolCanGoBack{get;}检测GoBack方法是否生效CanGoForwardpublicvirtualboolCanGoForward{get;}检测GoForward方法是否生效CanGoUppublicboolCanGoUp{get;}检测GoUp方法是否生效EditorTypeNamepublicoverridestringEditorTypeName{get;}获取控件的类名称“BreadCrumbEdit”IsNodeExpandedpublicvirtualboolIsNodeExpanded{get;}获取当前是否存在展开的节点PathpublicstringPath{get;set;}获取或设置当前节点路径(从根节点到最后一个可见节点)的字符串默认值String.EmptyPropertiespublicRepositoryItemBreadCrumbEditProperties{get;}获取一个RepositoryItemBreadCrumbEdit对象,该对象包含与该控件特定相关的属性、方法和事件SelectedNodepublicBreadCrumbNodeSelectedNode{get;set;}获取或设置当前选择的节点默认值null常用方法CalcHitInfopublicBreadCrumbEditHitInfoCalcHitInfo(Pointpt)publicBreadCrumbEditHitInfoCalcHitInfo(intx,inty)返回控件中目标位置的相关信息GetNavigationHistorypublicBreadCrumbHistoryGetNavigationHistory()获取完整的导航历史记录GetNavigationHistoryCurrentItemIndexpublicintGetNavigationHistoryCurrentItemIndex()获取当前节点在导航历史记录中的索引GetPopupEditFormpublicDevExpress.XtraEditors.Popup.BreadCrumbPopupFormGetPopupEditForm()返回控件的弹出窗口如果未弹出下拉窗口,返回nullGoBackpublicvoidGoBack()导航到历史导航记录中的上一条记录路径GoForwardpublicvoidGoForward()导航到历史导航记录中的下一条记录路径GoUppublicvoidGoUp()导航到当前节点的父节点ResetNavigationHistorypublicvoidResetNavigationHistory()清空历史导航记录控件包括两个独立的历史导航记录默认是Edit模式下在编辑文本框中输入的历史记录,通过属性RepositoryItemBreadCrumbEdit.History访问第二个是Select模式下通过选择方式导航的历史记录方法GetNavigationHistory返回的是Edit模式和Select模式下的所有导航记录方法History.Clear()清空的只是默认Edit模式下的历史导航记录方法ResetNavigationHistory清空的是完整的历史导航记录SelectAllpublicoverridevoidSelectAll()在Edit模式下,选择完整的路径字符串SetNavigationHistoryCurrentItemIndexpublicvoidSetNavigationHistoryCurrentItemIndex(intitemIndex)设置当前节点在导航历史记录中的索引常用事件PathChangedpubliceventBreadCrumbPathChangedEventHandlerPathChanged当控件的路径发生改变时触发在Edit模式下,用户在编辑文本框中输入一个路径字符串,首先触发RepositoryItemBreadCrumbEdit.ValidatePath事件,只有路径通过验证才触发PathChanged事件SelectedNodeChangedpubliceventBreadCrumbSelectedNodeChangedEventHandlerSelectedNodeChanged当选择节点发生改变时触发事件RepositoryItemBreadCrumbEdit.SelectedNodeChanged等同于该事件代码示例创建一个文件导航条usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.IO;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingDevExpress.Utils.Menu;usingDevExpress.XtraEditors;usingDevExpress.XtraEditors.Repository;namespaceFileNavigator{publicpartialclassForm1:XtraForm{publicstaticreadonlyintMaxEntitiesCount=80;publicForm1(){InitializeComponent();Initialize();}voidmyItem_Click(objectsender,EventArgse){thrownewNotImplementedException();}voidProperties_QueryPopUp(objectsender,CancelEventArgse){thrownewNotImplementedException();}//SettheBreadcrumbEditor'sinitialpathvoidInitialize(){breadCrumbEdit1.Path=Environment.GetFolderPath(Environment.SpecialFolder.Desktop);foreach(DriveInfodriveInfoinGetFixedDrives()){breadCrumbEdit1.Properties.History.Add(newBreadCrumbHistoryItem(driveInfo.RootDirectory.ToString()));}}privatevoidbreadCrumbEdit1_Properties_NewNodeAdding(objectsender,DevExpress.XtraEditors.BreadCrumbNewNodeAddingEventArgse){e.Node.PopulateOnDemand=true;}//CheckwhetherornotthetargetpathexistsprivatevoidbreadCrumbEdit1_Properties_ValidatePath(objectsender,DevExpress.XtraEditors.BreadCrumbValidatePathEventArgse){if(!Directory.Exists(e.Path)){e.ValidationResult=DevExpress.XtraEditors.BreadCrumbValidatePathResult.Cancel;return;}e.ValidationResult=DevExpress.XtraEditors.BreadCrumbValidatePathResult.CreateNodes;}privatevoidbreadCrumbEdit1_Properties_QueryChildNodes(objectsender,DevExpress.XtraEditors.BreadCrumbQueryChildNodesEventArgse){//Addcustomshortcutstothe'Root'nodeif(string.Equals(e.Node.Caption,"Root",StringComparison.Ordinal)){InitBreadCrumbRootNode(e.Node);return;}//Addlocaldiscsshortcutstothe'Root'nodeif(string.Equals(e.Node.Caption,"Computer",StringComparison.Ordinal)){InitBreadCrumbComputerNode(e.Node);return;}//Populatedynamicnodesstringdir=e.Node.Path;if(!Directory.Exists(dir))return;string[]subDirs=GetSubFolders(dir);for(inti=0;i<subDirs.Length;i++){e.Node.ChildNodes.Add(CreateNode(subDirs[i]));}}voidInitBreadCrumbRootNode(BreadCrumbNodenode){node.ChildNodes.Add(newBreadCrumbNode("Desktop",Environment.GetFolderPath(Environment.SpecialFolder.Desktop)));node.ChildNodes.Add(newBreadCrumbNode("Windows",Environment.GetFolderPath(Environment.SpecialFolder.Windows)));node.ChildNodes.Add(newBreadCrumbNode("ProgramFiles",Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)));}voidInitBreadCrumbComputerNode(BreadCrumbNodenode){foreach(DriveInfodriveInfoinGetFixedDrives()){node.ChildNodes.Add(newBreadCrumbNode(driveInfo.Name,driveInfo.RootDirectory));}}protectedBreadCrumbNodeCreateNode(stringpath){stringfolderName=newDirectoryInfo(path).Name;returnnewBreadCrumbNode(folderName,folderName,true);}//GetthelocaldriveslistpublicstaticIEnumerable<DriveInfo>GetFixedDrives(){foreach(DriveInfodriveInfoinDriveInfo.GetDrives()){if(driveInfo.DriveType!=DriveType.Fixed)continue;yieldreturndriveInfo;}}//Getallsubfolderscontainedwithinthetargetdirectorypublicstaticstring[]GetSubFolders(stringrootDir){string[]subDirs=GetSubDirs(rootDir);if(subDirs==null)returnnewstring[0];if(subDirs.Length<=MaxEntitiesCount)returnsubDirs;string[]res=newstring[MaxEntitiesCount];Array.Copy(subDirs,res,res.Length);returnres;}//Getthenamesofthesubdirectoriespublicstaticstring[]GetSubDirs(stringdir){string[]subDirs=null;try{subDirs=Directory.GetDirectories(dir,"*",SearchOption.TopDirectoryOnly);}catch{}returnsubDirs;}privatevoidbreadCrumbEdit1_PathChanged(objectsender,BreadCrumbPathChangedEventArgse){label2.Text=breadCrumbEdit1.Path;}privatevoidbreadCrumbEdit1_Properties_PathChanged(objectsender,BreadCrumbPathChangedEventArgse){}}}
本文档为【DevExpress BreadCrumbEdit】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥5.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
有朋自远方来
以前从事过嵌入式C/C++、C#/ASP.NET Web开发,现在从事产品经理
格式:pdf
大小:324KB
软件:PDF阅读器
页数:14
分类:互联网
上传时间:2018-05-02
浏览量:260