C# Winfrom的listview中,为了实现鼠标高亮显示,我在ItemChecke事件和MouseLeave事件中编写了代码
但是,鼠标滑过以后,该行会高亮,但是这家伙就是反应迟钝。而且会出现重绘现象。。闪的我眼花+_+大虾门帮帮忙吧肿么解决重绘的问题? 我添加了BeginUpdate(),和EndUpdate()。。还是不行
代码:        /// <summary>
        /// 鼠标进入,当前行高亮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Ordered_lv_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
        {
            Ordered_lv.BeginUpdate();
            int i = e.Item.Index;
            for (int j = 0; j < Ordered_lv.Items.Count; j++)
            {
                Ordered_lv.Items[j].BackColor = Color.White;
            }
            Ordered_lv.Items[i].BackColor = Color.Pink;
            Ordered_lv.EndUpdate();
        }
        
        /// <summary>
        /// 鼠标离开颜色恢复
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Ordered_lv_MouseLeave(object sender, EventArgs e)
        {
            for (int j = 0; j < Ordered_lv.Items.Count; j++)
            {
                Ordered_lv.Items[j].BackColor = Color.White;
            }
        }
        

解决方案 »

  1.   

    Ordered_lv_MouseLeave , Ordered_lv_ItemMouseHover 两个事件里都有这个循环:for (int j = 0; j < Ordered_lv.Items.Count; j++)
                {
                    Ordered_lv.Items[j].BackColor = Color.White;
                }用不着,上来就把所有item 都刷一遍色啊。记录一下上一次上色的index,每次只刷一行就可以了。
      

  2.   

    private int lastindex = -1; /// <summary>
            /// 鼠标滑过,Dishinfo_lv高亮显示
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Dishinfo_lv_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
            {
                           if (lastindex >= 0)
                {
                    Dishinfo_lv.Items[lastindex].BackColor = Color.White;
                    Dishinfo_lv.Items[e.Item.Index].BackColor = Color.Pink;
                }
                lastindex = e.Item.Index;        }
    /// <summary>
            /// 鼠标离开控件,还原颜色
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Dishinfo_lv_MouseLeave(object sender, EventArgs e)
            {
                if (lastindex>=0)
                {
                    Dishinfo_lv.Items[lastindex].BackColor = Color.White; 
                }
                lastindex = -1;
            }这么做效果还是一样啊 TAT