C# ObjectListView未显示所选项目的选择颜色

C# ObjectListView未显示所选项目的选择颜色,c#,winforms,listview,objectlistview,C#,Winforms,Listview,Objectlistview,我有一个基本上是标准.NETListView的包装器。我的问题是,我无法确定方法调用的正确顺序,以便向控件添加新对象,滚动控件以确保对象可见,然后选择对象。下面是我实现这一点的代码。一切正常,但由于某种原因,选定项目/对象的背景色在我单击其中一列或调整其大小之前不会显示。我不确定控件是否没有被聚焦或什么 // objectListViewItems is of type BrightIdeasSoftware.ObjectListViewItems objectListViewItems.Add

我有一个基本上是标准.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);

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

像这样:

objectListView.AddObject(newItem);
objectListView.Focus();
objectListView.EnsureModelVisible(newItem);
objectListView.SelectObject(newItem);
另外,请确保之后没有执行可能导致另一个控件获得焦点的代码

要缩小发生的范围,您可以尝试设置

objectListView.HideSelection = false;
对于正常的
列表视图
,这样可以确保当前选择保持可见(但“灰显”),即使控件失去焦点


如果使用设计器,请发布完整的OLV配置(从
InitializeComponent()
)。可能是一些奇怪的星座导致了这一点。

这应该像你建议的那样起作用(我曾多次这样做)。但是,调用
Refresh()
和第二个
Focus()
是不必要的。此外,我更愿意使用
SelectObject()
而不是
SelectedObject
属性

像这样:

objectListView.AddObject(newItem);
objectListView.Focus();
objectListView.EnsureModelVisible(newItem);
objectListView.SelectObject(newItem);
另外,请确保之后没有执行可能导致另一个控件获得焦点的代码

要缩小发生的范围,您可以尝试设置

objectListView.HideSelection = false;
对于正常的
列表视图
,这样可以确保当前选择保持可见(但“灰显”),即使控件失去焦点


如果使用设计器,请发布完整的OLV配置(从
InitializeComponent()
)。可能是一些奇怪的星座造成了这种情况。

感谢您的解决方案……上面的代码是在一个定制的EventHandler中。当我一步一步地浏览Windows代码时,看起来好像发生了什么事情,导致控件失去焦点并被取消选中。我将代码从事件处理程序中移出,它工作得很好。今天,我想我将尝试设置HideSelection=false,并将其移回事件处理程序以查看发生了什么。HideSelection=false对我有帮助!感谢您的解决方案…上面的代码位于自定义EventHandler中。当我一步一步地浏览Windows代码时,看起来好像发生了什么事情,导致控件失去焦点并被取消选中。我将代码从事件处理程序中移出,它工作得很好。今天,我想我将尝试设置HideSelection=false,并将其移回事件处理程序以查看发生了什么。HideSelection=false对我有帮助!