2013-01-23 73 views
1

我有一个ObjectListView,它基本上是标准.NET ListView的包装。我的问题是,我无法弄清楚正确的方法调用顺序来添加一个新的对象到控件,滚动控件以确保对象是可见的,并选择对象。下面是我的代码来实现这一点。一切正常,但由于某种原因,选定的项目/对象的背景颜色不显示,直到我点击或重新调整其中一列。我不确定控制是不是集中或什么。ObjectListView不显示所选项目的选择颜色

// objectListViewItems is of type BrightIdeasSoftware.ObjectListViewItems 
objectListViewItems.AddObject(e.InsertedItem); 
objectListViewItems.Refresh(); 
objectListViewItems.Focus(); 
objectListViewItems.EnsureModelVisible(e.InsertedItem); 
objectListViewItems.SelectedObject = e.InsertedItem; 
objectListViewItems.Focus(); 

下面的代码更新了ObjectListView中的一个项目,工作得很好。不知道我上面做错了什么...

objectListViewItems.RefreshObject(itemToEdit); 
objectListViewItems.Focus(); 
objectListViewItems.SelectObject(itemToEdit); 

回答

4

这应该像你建议的(我曾多次这样做)工作。然而,呼叫Refresh()和第二个Focus()是不必要的。此外,我宁愿使用SelectObject()SelectedObject属性。

像这样:

objectListView.AddObject(newItem); 
objectListView.Focus(); 
objectListView.EnsureModelVisible(newItem); 
objectListView.SelectObject(newItem); 

此外,还要确保不存在事后执行的代码,这可能会导致其他控件获得焦点。

为了缩小所发生的事情,你可以尝试设置

objectListView.HideSelection = false; 

至于标准ListView,这确保了当前选择保持可见(但为“灰色”出来的),即使控制失去焦点。

如果您使用过设计器,请发布完整的OLV配置(从InitializeComponent())。也许有一些奇怪的星座造成这种情况。

+0

感谢您的解决方案...上面的代码是在一个自定义的EventHandler。当我全程通过Windows代码时,看起来像是发生了什么事情,导致控件失去焦点并被取消选中。我将代码移出事件处理程序,并且它工作正常。今天,我认为我将尝试设置HideSelection = false并将其移回事件处理程序以查看会发生什么。 – Grasshopper

+0

Hideselection = false是对我的帮助! –