【问题标题】:Selecting an item in a ListView control ( winforms ) while not having the focus在没有焦点的情况下选择 ListView 控件 (winforms) 中的项目
【发布时间】:2010-03-27 23:55:45
【问题描述】:

我正在尝试在 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

【问题讨论】:

    标签: winforms listview


    【解决方案1】:

    手动设置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;
    

    【讨论】:

      【解决方案2】:

      没关系,只需操纵所选项目的背景颜色即可

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        • 2010-11-08
        • 1970-01-01
        • 2011-07-29
        • 2012-04-03
        • 2015-12-17
        • 1970-01-01
        相关资源
        最近更新 更多