DevExpress问题积累:DocumentManager问题
DevExpress 版本:14.2
目的:创建可拖拽的控件浏览视图
过程:
1、创建DocumentManager控件:DevExpress.XtraBars.Docking2010.DocumentManager DmUvw;
2、创建在DocumentManager控件中加入WidgetView:DevExpress.XtraBars.Docking2010.Views.Widget.WidgetView widgetView1;
3、通过代码动态添加Document
/// <summary> /// 添加Document /// </summary> /// <param name="doName"></param> public void AddDocument(string doName) { Document bd = new Document(); bd.Caption = doName; DmUvw.View.Documents.Add(bd); }
事件:其中UcTemp是自定义控件
DmUvw.View.QueryControl += View_QueryControl; private void View_QueryControl(object sender, QueryControlEventArgs e) { string tempVmeName = e.Document.Caption; UcTemp ucTemp = new UcTemp(tempVmeName); e.Control = ucTemp; }
4、通过代码删除Document
/// <summary> /// 删除Document /// </summary> /// <param name="doName"></param> public void DeleteDocument(string doName) { foreach (BaseDocument bd in DmUvw.View.Documents) { if (bd.Caption == doName) { DmUvw.View.Documents.Remove(bd); return; } } }
问题:通过代码删除Document经常出现问题,删除之后界面未刷新,例如加载5个Document。逐一进行删除,偶尔出现一、两个Document实际已删除,但界面显示未删除的问题。
解决办法:多次试验,最终偶发发现解决办法。
1、在widgetView1中增加StackGroup:DevExpress.XtraBars.Docking2010.Views.Widget.StackGroup stackGroup1;
2、增加时将每个Document放入stackGroup1。
/// <summary> /// 添加Document /// </summary> /// <param name="doName"></param> public void AddDocument(string doName) { Document bd = new Document(); bd.Caption = doName; DmUvw.View.Documents.Add(bd); stackGroup1.Items.Add(bd); }