主题:菜鸟问大家一个问题..关于listView控件
sts017
[专家分:360] 发布于 2006-11-28 00:40:00
大家我,我想问一下~
现在我把开机启动项从注册表中提取出来了,想放在listView下的3个列里,列已经建立好了,可是信息做循环后只能放在columnHeader1下请问一下知道的朋友,怎么能把索引设置成columnHeader2和columnHeader3?或者用别的方法?谢谢~[em4][em4][em4]
回复列表 (共5个回复)
沙发
sts017 [专家分:360] 发布于 2006-11-28 15:46:00
我的代码如下:
RegistryKey myRK = Registry.LocalMachine.OpenSubKey("SOFTWARE");
RegistryKey myRKMfr = myRK.OpenSubKey("Microsoft");
RegistryKey myRKwin = myRKMfr.OpenSubKey("Windows");
RegistryKey myRKCv = myRKwin.OpenSubKey("CurrentVersion");
RegistryKey myRKRun = myRKCv.OpenSubKey("Run");
int a = 0;
foreach (string site in myRKRun.GetValueNames())
//开始遍历由子键名称组成的字符串数组
{
this.listView1.Items.Add(site);
ListViewItem myitem = new ListViewItem();
this.listView1.Items[a].SubItems[0].Text = site;
this.listView1.Items[a].SubItems[1].Text = myRKRun.GetValue(site).ToString();
this.listView1.Items[a].SubItems[2].Text = myRKRun.GetValueKind(site).ToString();
++a;
// this.listView1.Items.Add(myRKRun.GetValueKind(site).ToString());
// this.listView1.Items.Add(myRKRun.GetValue(site).ToString());
}
MessageBox.Show("共有"+a.ToString()+"个启动项");
现在
this.listView1.Items[a].SubItems[1].Text = myRKRun.GetValue(site).ToString();和this.listView1.Items[a].SubItems[2].Text = myRKRun.GetValueKind(site).ToString();有问题
板凳
mlx574 [专家分:90] 发布于 2006-11-28 17:50:00
ListViewItem myitem;
listView1.BeginUpdate();
foreach (string site in myRKRun.GetValueNames())
//开始遍历由子键名称组成的字符串数组
{
myitem=listView1.Items.Add(site);
myitem.SubItems .Add (myRKRun.GetValue(site).ToString());
myitem.SubItems .Add (myRKRun.GetValueKind(site).ToString());
......
}
listView1.EndUpdate();
3 楼
sts017 [专家分:360] 发布于 2006-11-28 18:03:00
问题已经解决了,不过有几个问题..
第一:
对于listView的第一列必须写this.listView1.Items.Add(site);吗?
第二:
如果我的listView里存在SubItems,那么我在后两列里写:
this.listView1.Items[a].SubItems[0].Text = myRKRun.GetValueKind(site).ToString();
this.listView1.Items[a].SubItems[1].Text = myRKRun.GetValueKind(site).ToString();
为什么还是出现错误?
4 楼
mlx574 [专家分:90] 发布于 2006-12-11 16:14:00
myitem是listView控件的一个项
而site是listView控件的一个名为myitem的项的第一列数据
所以只有这样写才行.
而SubItems是listView控件的某个项的所有列的集合,
如SubItems[N]表示某个项的第N个列的数据.
你试试这样写:
myitem=listView1.Items[a];
myitem.SubItems .Add (myRKRun.GetValueKind(site).ToString());
myitem.SubItems .Add (myRKRun.GetValueKind(site).ToString());
(我没有测试过哟.....)
5 楼
sts017 [专家分:360] 发布于 2006-12-11 17:19:00
呵呵.谢谢你的回答
你给的例子我没有测试过,一会去试试.不过现在我大概知道怎么回事了
listView这个控件里 ,如果有列的话,并且没有手动加内容那么就这样:
this.listView1.Items[a].SubItems.Add()....
如果有多列也没有关系,只需要加多行同样的代码,那么listView就会自动变到下一个列
但如果在每个列里有内容的话,那么就需要加上列的索引值了
我来回复