关于listview中Item重画的问题

fx_guo 2010-06-13 11:27:41
窗体的设计如下,是在窗体上放一个LIstView控件,然后放一个ImageList(ImageSize(50,40))控件,并把listView的largeImageList属性选择ImageList,然后又放置一个TabControl控件
我在窗体进行Load的时候,我执行以下代码,给listview添加项,代码如下
for (int i = 0; i < 14; i++)
{
ListViewItem lvi=new ListViewItem();
lvi.Text = DateTime.Now.AddDays(i).ToString("MM月dd日");
lvi.ToolTipText = dt初始显示时间.AddDays(i).ToString("yyyy-MM-dd");
lsv预订状态.Items.Add(lvi);
}
这是重画的代码
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
Rectangle rect = e.Bounds;
rect.Width = rect.Width - 3;
if ((e.State & ListViewItemStates.Selected) != 0)
{
//更改选中的背景颜色
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(215, 232, 252)), rect);
//绘制边框
e.Graphics.DrawRectangle(new Pen(Color.FromArgb(125, 162, 206)), rect);
}
else
{
//默认的背景颜色
using (SolidBrush bBrush = new SolidBrush(Color.White))
{
e.Graphics.FillRectangle(bBrush, rect);
//绘制边框
e.Graphics.DrawRectangle(new Pen(Color.FromArgb(125, 162, 206)), rect);
}
}
if (((ListView)sender).View != View.Details)
{
Font ft = new System.Drawing.Font(FontFamily.GenericSansSerif, 9);
SolidBrush fontbrush = new SolidBrush(Color.Blue);
StringFormat Format = new StringFormat();
Format.Alignment = StringAlignment.Center;
e.Graphics.DrawString(e.Item.Text, ft, fontbrush, new RectangleF(rect.Left, rect.Top+10, rect.Width, rect.Height), Format);
ft.Dispose();
fontbrush.Dispose();
}

}
这样我在窗体运行的时候,我点击listview的Item项时,每个项能处于选中状态,我点击TabControl控件的时候,他的选中状态就没有了.listView当中有个属性HideSelecttion默认值为true,
当我把HideSelecttion设置成False的时候,listView中的所有Item的状态都变成了选中的状态.现在我想实现的是,我要重画ListView的item项,当我点击那个Item,那个Item进行选中,而且我在本窗体当中点击除了(ListView控件)其他控件的时候,我要把listView当中选中哪一个项给显示出来,就像windows Exploer当中的效果,我应该怎么做呢?
谢谢,
我还发现如果我不重画ListView的item的话,那是通过HideSelection可以实现效果.但是现在ListView的Item不能满足要求,我只能重画了.
...全文
134 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzx509 2010-06-13
  • 打赏
  • 举报
回复

if (listView1.SelectedItems.Count>0&& listView1.SelectedItems[0] == e.Item)
{
//更改选中的背景颜色
...
}
宇峰科技 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zzx509 的回复:]
C# code

if (listView1.SelectedItems.Count>0&& listView1.SelectedItems[0] == e.Item)
{
//更改选中的背景颜色
...
……
[/Quote]顶

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧