>>可是这是一个事件阿,可不可以在这个事件里面添加item呢?
没有必要吗!用两个事件共同显示一个Item的文字部分和颜色不凡并不复杂,也不麻烦啊!
我不太清楚你到底要实现什么功能。这样吧,如果上面我说的隔行显示不同的颜色,还有点
特殊的话,那我举一个比较随机例子。比如:我们用ListView控件显示股票的信息,就象证券
交易所里的大屏幕显示的当前股票涨跌的那个样子,每行显示一支股票的名称,开盘价......
而且,如果这支股票当前是上涨的,就用红色的文字显示;下跌就用绿色的文字显示,然后每
10秒钟刷新一次,为了及时显示当前最新的涨跌情况(哈哈,我对股票不是很懂,说出外行话
大家不要笑话我啊
)
假如显示的顺序是下面这样的:
===========================================
股票名称 开盘价 当前价 ......
-------------------------------------------
四川长虹 1111 2322 ......
炎黄在线 1212 3333 ......
.............................
.............................
===========================================
那么就应该这样做:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//每隔10秒钟从接收装置中取来最新的数据,更新一次ListView
TListItem* NewItem ;
ListView1->Items->BeginUpdate(); //禁止ListView控件刷新
ListView1->Items->Clear();
for(int i=0; i<股票一共有多少支; i++) //用一个循环将股票数据的文字部分更新一遍
{
NewItem = ListView1->Items->Add();
NewItem->Caption = "股票名称";
NewItem->SubItems->Add( "开盘价" );
NewItem->SubItems->Add( "当前价" );
......
}
ListView1->Items->EndUpdate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
//在这里指定颜色,假设你用数据库存取历史记录,就应该用最新收到的“当前价”和
//上一次的“当前价”相比较,这样,就知道股票的涨跌情况了,就利用这一点来指定
//相应的显示颜色
if( StrToInt(Item->SubItems->Strings[1]) > "31" )
Sender->Canvas->Font->Color = clRed;
else
Sender->Canvas->Font->Color = clGreen;
// StrToInt(Item->SubItems->Strings[1]) 是将最新的“当前价”转换为整型
// "31" 假设是上一次的“当前价”
}
这样不就行了吗,就是判断一下,也并不麻烦呀