在没有焦点的情况下选择ListView控件(winforms)中的项目

时间:2010-03-27 23:55:46

标签: winforms listview

我正在尝试模仿Outlook中通讯录的功能 所以基本上用户开始在编辑控件中输入一些文本并选择匹配的ListView项

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();
        }

    }

问题在于,一旦列表视图项被选中,用户就无法在文本框中输入。基本上我想要一种方法来突出列表视图中的项目,同时仍然专注于编辑控件

这是WINFORMS 2.0

2 个答案:

答案 0 :(得分:3)

手动设置ListViewItem.BackColor并不是一个好的解决方案,特别是如果您希望项目获得selected状态,因为它仅适用于未选择的项目。因此,您必须处理几种情况,使其在所有情况下都看起来正确(一旦ListView获得焦点,请立即选择项目,撤消颜色更改,等等......)

似乎唯一好办法是使用Ownerdraw或像ObjectListView这样的扩展ListView。

我一直在寻找相同的东西,我仍然希望有一个更好/更智能的解决方案,或者至少是一个很好的简短的Ownerdraw实现。

<强>更新
我为 me 找到了一个更好的解决方案:我现在使用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;

答案 1 :(得分:0)

好吧,不要因为操纵所选项目的背景颜色而无法理解它