2013-01-23 78 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是對我的幫助! –