2014-10-09 132 views
0

我正在使用OLV的winforms和2.7.0版本。我已经注意到这个控件似乎是一个绘画问题。我的标题显示“背景颜色变为黑色”,但实际上整个控制在某些时候显示为黑色。我有这种控制坐在一个窗体上有很多其他控件,他们不表现出这种行为。这个问题似乎与表单变得无法响应有关。我从这个应用程序进行web服务调用,并且有时候这些调用没有及时完成。在这些情况下,我的应用程序将暂时无响应。通常,只需很短的时间(2或3秒),并在标题栏中看到(不响应)文本。发生这种情况时,OLV控制器占用的区域变黑。如果其他人看到了这一点,我想知道是否有一些设置可能需要更改。注意:我的表单上没有其他窗口。下面objectlistview背景颜色变为黑色

 this.objListView_EvidenceFiles.AllColumns.Add(this.olvColFileName); 
     this.objListView_EvidenceFiles.AllColumns.Add(this.olvColCancelButton); 
     this.objListView_EvidenceFiles.BackColor = System.Drawing.Color.White; 
     this.objListView_EvidenceFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 
     this.olvColFileName, 
     this.olvColCancelButton}); 
     this.objListView_EvidenceFiles.EmptyListMsg = ""; 
     this.objListView_EvidenceFiles.EmptyListMsgFont = new System.Drawing.Font("Arial", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
     this.objListView_EvidenceFiles.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
     this.objListView_EvidenceFiles.FullRowSelect = true; 
     this.objListView_EvidenceFiles.HeaderUsesThemes = false; 
     this.objListView_EvidenceFiles.HideSelection = false; 
     this.objListView_EvidenceFiles.Location = new System.Drawing.Point(16, 10); 
     this.objListView_EvidenceFiles.MultiSelect = false; 
     this.objListView_EvidenceFiles.Name = "objListView_EvidenceFiles"; 
     this.objListView_EvidenceFiles.OwnerDraw = true; 
     this.objListView_EvidenceFiles.SelectAllOnControlA = false; 
     this.objListView_EvidenceFiles.SelectColumnsOnRightClick = false; 
     this.objListView_EvidenceFiles.SelectColumnsOnRightClickBehaviour = BrightIdeasSoftware.ObjectListView.ColumnSelectBehaviour.None; 
     this.objListView_EvidenceFiles.ShowGroups = false; 
     this.objListView_EvidenceFiles.ShowItemToolTips = true; 
     this.objListView_EvidenceFiles.Size = new System.Drawing.Size(200, 238); 
     this.objListView_EvidenceFiles.SmallImageList = this.imageList_Icons; 
     this.objListView_EvidenceFiles.TabIndex = 1; 
     this.objListView_EvidenceFiles.TabStop = false; 
     this.objListView_EvidenceFiles.UnfocusedHighlightBackgroundColor = System.Drawing.SystemColors.MenuHighlight; 
     this.objListView_EvidenceFiles.UnfocusedHighlightForegroundColor = System.Drawing.Color.White; 
     this.objListView_EvidenceFiles.UseCompatibleStateImageBehavior = false; 
     this.objListView_EvidenceFiles.View = System.Windows.Forms.View.Details; 
     this.objListView_EvidenceFiles.CellClick += new System.EventHandler<BrightIdeasSoftware.CellClickEventArgs>(this.objListView_EvidenceFiles_CellClick); 
     this.objListView_EvidenceFiles.SelectionChanged += new System.EventHandler(this.objListView_EvidenceFiles_SelectionChanged); 
     this.objListView_EvidenceFiles.Leave += new System.EventHandler(this.objListView_EvidenceFiles_Leave); 

我有我们的应用程序的截图一些设计师的代码(一些项目,我不希望暴露被清除): enter image description here

+0

我从来没有见过这个问题,但我会尝试在崩溃或发生这种情况时使用* ClearObjects *,* AddObjects *和* BuildList *重置OLV。 – 2014-10-12 23:47:36

+0

@BarryGuvenkaya,我可能没有足够好地解释这个细节,但是控件并没有崩溃。黑色暂时显示。当表单再次响应时,控制权恢复生机并按预期工作。 – 2014-10-14 01:33:10

回答

0

你已经标记为ObjectListView OwnerDrawn,所以Windows将发送消息在需要重绘时发送给控件。在下面,Window将清除控件的显示缓冲区,等待控件呈现自己,但控件不能,因为你已经基本上挂了你的应用程序在这2或3秒。重绘的消息已经排队,并且只要应用程序再次开始工作,就会进行处理。

最佳解决方案:不要挂你的应用程序!将长时间运行的任务移至后台线程,并在后台提取完成时更新UI。东西like this