ListView的小问题

xiexiaoyudc 2003-09-15 09:53:32
怎么才能把ListView做的列表里各行根据某些条件显示为不同的颜色,我是在ListView里用listitem里添加行的,我试的,但只能把整个列表的背景颜色一块改了,高手谢谢了
...全文
36 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun_wyz 2003-09-15
  • 打赏
  • 举报
回复
这个问题问过无数遍了,建议楼主提问之前先搜索一下!!
crii 2003-09-15
  • 打赏
  • 举报
回复
ListView On CustomDrawSubItem() 就可以辣。
xiexiaoyudc 2003-09-15
  • 打赏
  • 举报
回复
我是在数据库里查找,根据某些条件把行显示为不同颜色,这样清楚了吗
tccsdn 2003-09-15
  • 打赏
  • 举报
回复
晕啊,楼上的这么快,难怪帖子半天提交不上来
tccsdn 2003-09-15
  • 打赏
  • 举报
回复
你的问题不是很清楚,如果是一行的话,有个OnDrawItem事件可以画,如果是一行中的其中一列就应该比较麻烦了
ccrun.com 2003-09-15
  • 打赏
  • 举报
回复
再给你一段代码,是我程序中用到的一部分。

void __fastcall TFormMain::LVCustomDrawItem(TCustomListView *Sender,
TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
//将LV中可能有错的地方涂色
if(Item->SubItems->Strings[2]!="" && Item->SubItems->Strings[3]!="")
{
if((Item->SubItems->Strings[8].ToInt()!=0) || (Item->SubItems->Strings[9].ToInt()!=0))
{
LV->Canvas->Brush->Color=(TColor)RGB(0xFF,0xFF,0x00);//可能出现错误,用黄色代表。
}
else
{
LV->Canvas->Brush->Color=(TColor)RGB(0x0,0xFF,0x00);//如果正确用绿色代替。
}
}
}
tccsdn 2003-09-15
  • 打赏
  • 举报
回复
你的问题不是很清楚,如果是一行的话,有个OnDrawItem事件可以画,如果是一行中的其中一列就应该比较麻烦了
tccsdn 2003-09-15
  • 打赏
  • 举报
回复
你的问题不是很清楚,如果是一行的话,有个OnDrawItem事件可以画,如果是一行中的其中一列就应该比较麻烦了
ccrun.com 2003-09-15
  • 打赏
  • 举报
回复
以上只是隔行不同颜色的例子。如果要做到根据不同的Item来决定不同的颜色,还是在ListView的CustomDrawItem中:

void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
int Index = Item->Index;
if (Index == 0)
ListView1->Canvas->Brush->Color = (TColor)0x808080;
else if(Index == 1)
ListView1->Canvas->Brush->Color = (TColor)0xB0B0B0;
else if(Index == 2)
ListView1->Canvas->Brush->Color = (TColor)0xE0E0E0;
else
ListView1->Canvas->Brush->Color = clWhite;
ListView1->Canvas->Pen->Color = clWindowText;
}
ccrun.com 2003-09-15
  • 打赏
  • 举报
回复
以上只是隔行不同颜色的例子。如果要做到根据不同的Item来决定不同的颜色,还是在ListView的CustomDrawItem中:

void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
int Index = Item->Index;
if (Index == 0)
ListView1->Canvas->Brush->Color = (TColor)0x808080;
else if(Index == 1)
ListView1->Canvas->Brush->Color = (TColor)0xB0B0B0;
else if(Index == 2)
ListView1->Canvas->Brush->Color = (TColor)0xE0E0E0;
else
ListView1->Canvas->Brush->Color = clWhite;
ListView1->Canvas->Pen->Color = clWindowText;
}
boat2002w 2003-09-15
  • 打赏
  • 举报
回复
void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
if (Item->Index%2 != 0)
ListView1->Canvas->Brush->Color = (TColor)RGB(210,240,240);
else ListView1->Canvas->Brush->Color = (TColor)RGB(240,240,240);
}
ccrun.com 2003-09-15
  • 打赏
  • 举报
回复
ListView的例子

void __fastcall TMainForm::ListView1CustomDrawItem(
TCustomListView *Sender, TListItem *Item, TCustomDrawState State,
bool &DefaultDraw)
{

if ( ListView1->ViewStyle == vsReport )
if (Item->Index%2 != 0)
ListView1->Canvas->Brush->Color =(TColor)0x9cfb9c;
}
tccsdn 2003-09-15
  • 打赏
  • 举报
回复
好象比较难哦,用STRINGGRID方便一点

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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