2010-03-27 33 views
1

我試圖模仿地址簿的功能,在Outlook中 所以基本上用戶開始在編輯控件的一些文字和匹配的ListView項打字被選中選擇一個項目在ListView控件(的WinForms),同時不具有焦點

private void txtSearchText_TextChanged(object sender, EventArgs e) 
{ 
    ListViewItem lvi = 
      this.listViewContacts.FindItemWithText(this.txtSearchText.Text,true, 0); 

     if (lvi != null) 
     { 
      listViewContacts.Items[lvi.Index].Selected = true; 
      listViewContacts.Select(); 
     } 

    } 

這個問題是一旦listview項被選中,用戶不能繼續鍵入文本框。基本上我想要的方式來突出顯示列表視圖中的項目,同時仍保持專注於編輯控件

這是的WinForms 2.0

回答

0

確定不去管它通過只運用所選項目的背景顏色是可行的

3

手動設置ListViewItem.BackColor不好的解決方案,特別是如果你想要的項目,以獲得selected狀態,因爲它只能在非選擇項目。因此,您必須注意幾種情況,以使其在所有情況下看起來都正確(ListView獲取焦點後立即選擇項目,撤消顏色更改,等等......)

看起來是唯一的好的方法是使用Ownerdraw或像ObjectListView這樣的擴展ListView。

我一直在尋找同樣的,我仍然希望有一個更好/更聰明的解決方案,或者至少一個很好的和短的OwnerDraw實施。

更新
我發現一個更好的解決方案我:我現在用一個DataGridView爲了同樣的目的(其中也有我的情況等優勢,因爲數據來自分貝無論如何,但它會也沒有分貝工作)。在失去焦點時,選擇欄不會改變顏色。你可以嘗試一些屬性,使它看起來像一個ListView:

dgv.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; 
dgv.ColumnHeadersVisible = false; 
dgv.MultiSelect = false; 
dgv.ReadOnly = true; 
dgv.RowHeadersVisible = false; 
dgv.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; 
dgv.StandardTab = true; 
相關問題