回 帖 发 新 帖 刷新版面

主题:菜鸟问大家一个问题..关于listView控件

大家我,我想问一下~
现在我把开机启动项从注册表中提取出来了,想放在listView下的3个列里,列已经建立好了,可是信息做循环后只能放在columnHeader1下请问一下知道的朋友,怎么能把索引设置成columnHeader2和columnHeader3?或者用别的方法?谢谢~[em4][em4][em4]

回复列表 (共5个回复)

沙发

我的代码如下:
 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();有问题

板凳


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 楼

问题已经解决了,不过有几个问题..
第一:
对于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 楼

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 楼

呵呵.谢谢你的回答
你给的例子我没有测试过,一会去试试.不过现在我大概知道怎么回事了
listView这个控件里 ,如果有列的话,并且没有手动加内容那么就这样:
this.listView1.Items[a].SubItems.Add()....
如果有多列也没有关系,只需要加多行同样的代码,那么listView就会自动变到下一个列
但如果在每个列里有内容的话,那么就需要加上列的索引值了

我来回复

您尚未登录,请登录后再回复。点此登录或注册