CListCtrl无法动态添加数据,即不能用setitemtext()添加

2025-03-12 13:26:32
推荐回答(4个)
回答1:

void Listview::OnStart(void)
{ setlist();
CListCtrl& theCtrl=GetListCtrl();
theCtrl.DeleteAllItems();
}
void Listview::setlist(void)
{
CListCtrl& m_list=GetListCtrl();//在这里开始有问题,编译能通过,但是列表没有显示asdfasfa
m_list.InsertItem(0,_T("01"));
m_list.SetItemText(0,1,_T("asdfasfa"));
}

SetList函数里面有GetListCtrl,这个和OnStart函数里调用的GetListCtrl反回的是同一个ListCtrl对象的引用,虽然两个名字不一样,但是实际是代表的同一个对象。由于调用了SetList后,又调用了DeleteAllItem,把刚添加的项删除了,因此没有显示。我想你调用的GetListCtrl调用错了,你再检查下,要获取两个不同的ListCtrl怎么可能用同样的函数。。。

回答2:

返回值
如果成功是非0,否则是0
参数
nitem
将被设置文本的项目的索引。(这是指行的索引,哪一行)
nSubItem
子项目的索引(这是指列,这一行的哪一列)
lpszText
指向包含新文本的字符串(要写入的字符串指针,直接传递CString对象就可以了)

InsertItem就是插入一行,你在向CListCtrl中加如一行数据的时候,必须先要调用这个函数。先插入一行,然后在向这一行中写入数据!

英文看不懂可以用金山词霸啊。

回答3:

在这种情况下:
1.你应该给list control添加一个控件类型的变量,方便使用。
2.你看看SetItemText的返回值是什么,应该是成功了的,但是显示不了,应该
m_tree.SetRedraw(FALSE);
//do erase and insert operation
m_tree.SetRedraw(TRUE);
m_tree.RedrawWindow();
试试应该行了

回答4:

应该换一下顺序吧:

setlist(); //这里添加了数据
CListCtrl& theCtrl=GetListCtrl();
theCtrl.DeleteAllItems(); // 这里全部删除了。