我正在尝试模仿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
答案 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)
好吧,不要因为操纵所选项目的背景颜色而无法理解它