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;
}
}
但是,鼠标滑过以后,该行会高亮,但是这家伙就是反应迟钝。而且会出现重绘现象。。闪的我眼花+_+大虾门帮帮忙吧肿么解决重绘的问题? 我添加了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;
}
}
{
Ordered_lv.Items[j].BackColor = Color.White;
}用不着,上来就把所有item 都刷一遍色啊。记录一下上一次上色的index,每次只刷一行就可以了。
/// 鼠标滑过,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