我有一个ObjectListView
,它本质上是标准.NET ListView
的包装器。我的问题是我无法找出正确的方法调用序列,以向控件添加新对象,滚动控件以确保对象可见,并选择对象。下面,是我的代码实现这一点。一切正常,但由于某种原因,在我点击或重新调整其中一列之前,所选项目/对象的背景颜色不会显示。我不确定控件是否没有被关注或是什么。
// 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);
答案 0 :(得分:5)
这应该像你提议的那样(我曾多次这样做)。但是,调用Refresh()
和第二个Focus()
是不必要的。另外,我宁愿使用SelectObject()
而不是SelectedObject
属性。
像这样:
objectListView.AddObject(newItem);
objectListView.Focus();
objectListView.EnsureModelVisible(newItem);
objectListView.SelectObject(newItem);
此外,请确保之后没有执行任何代码,这可能会导致另一个控件获得焦点。
要缩小发生的情况,您可以尝试设置
objectListView.HideSelection = false;
对于普通ListView
,这可确保当前选择保持可见(但“灰显”),即使控件失去焦点。
如果您使用设计师,请发布完整的OLV配置(来自InitializeComponent()
)。也许有一些奇怪的星座导致了这一点。