标题:将ListView中的信息复制到另一窗口的ListView中
只看楼主
Sephirose
Rank: 1
来 自:四川-乐山
等 级:新手上路
帖 子:51
专家分:0
注 册:2013-3-26
结帖率:55.56%
已结贴  问题点数:16 回复次数:4 
将ListView中的信息复制到另一窗口的ListView中
两个窗口form1和form2,各有一个ListView控件,form2上有一个Button按键,想要实现的功能是点击Button后将该页面的ListView控件中的内容显示到form1中的ListView中,该怎么实现啊,我自己想的是用foreach遍历整个ListView控件中的内容,再将其值传递过去,但是显示的是“无法将类型string[]为System.Windows.Forms.ListViewItem”,
form2
public string[] ord;

 private void button1_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem item in listView1.Items)
            {
                string[] ord = new string[] { Convert.ToString(item) };
            }
            this.Close();
        }

form1
public Form1 od = null;

 private void Form_Load(object sender, EventArgs e)
        {
            this.listView1.Items.AddRange(new ListViewItem[] { od.ord });
        }
搜索更多相关主题的帖子: private 
2013-03-30 18:35
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:8 
就这几句关键代码,都句句有问题,当然就靠这几句是不行的,其它你没贴出来的就认为你是会的
1 ord是定义在form2中, od是form1的引用, od.ord这...
2 ListViewItem跟string数组不是一个概念,不能 Convert.ToString(item)转换的,即使不报错,也得不到你想要的结果,除非listview中只有1列,那样可以,不过也只是瞎猫碰上死耗子而已.
3 foreach中string[] ord = new string[] { Convert.ToString(item) };每次new一个新的,那前面的就不要了?
4 this.listView1.Items.AddRange(new ListViewItem[] { od.ord });string数组是不能变成ListViewItem[]数组的,只能变成一个ListViewItem对象,也就是一行,而不是多行

定义string数组是没法装下所有行的,建议public List<ListViewItem> ord;
foreach里面,ord.Add((ListViewItem)(item.Clone()));这样就将每一行装入List<ListViewItem>中了
od应为form2的引用,public Form2 od = null;
显示在form1中的关键代码为
ListViewItem[] lv = f1.li.ToArray();   //将List<ListViewItem>转换为ListViewItem数组,这就是为什么用List<ListViewItem>的原因,因为可以转换
this.listView1.Items.AddRange(lv);    //用ListViewItem数组填充listview
2013-03-30 20:22
Sephirose
Rank: 1
来 自:四川-乐山
等 级:新手上路
帖 子:51
专家分:0
注 册:2013-3-26
得分:0 
回复 2楼 yhlvht
尝试着修改了,系统可以运行,可是不显示内容啊
form1
public Form2 od = null;

private void Form_Load(object sender, EventArgs e)
        {
             ListViewItem[] lv = od.ord.ToArray();   
            this.listView1.Items.AddRange(lv);   
        }

form2
public List<ListViewItem> ord;

 private void button1_Click(object sender, EventArgs e)
        {
            ord = new List<ListViewItem>();
            foreach (ListViewItem item in listView1.Items)
            {
                ord.Add((ListViewItem)(item.Clone()));
            }
            this.Close();
            Sell ss = new Sell();
            ss.Show();
            this.Hide();
        }
2013-04-01 23:25
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:8 
this.Close();//关闭当前窗体
this.Hide(); //隐藏当前窗休
都关闭了,还隐藏什么呀,这个并不是不显示的原因,只是我看着别扭

Sell ss = new Sell(); //创建Sell窗体对象
ss.Show(); //显示窗体
但是我们在Sell窗体中定义的public Form2 od = null;赋的初始值是null,如果不给od赋值,那怎么从od里面取得出东西呢
所以在创建了Sell窗体对象以后,要给这个对象中的od赋值
Sell ss = new Sell(); //创建Sell窗体对象
ss.od = this;   //让Sell对象中的od引用,指向当前Form2窗体,那么在Sell类中,使用od的时候,之前在Form2中操作并赋给变量的值才会有
ss.Show(); //显示窗体
2013-04-01 23:42
Sephirose
Rank: 1
来 自:四川-乐山
等 级:新手上路
帖 子:51
专家分:0
注 册:2013-3-26
得分:0 
回复 4楼 yhlvht
是这样子的么
private void button1_Click(object sender, EventArgs e)
        {
            Sell ss = new Sell();
            
            ord = new List<ListViewItem>();
            ss.od = this;
            foreach (ListViewItem item in listView1.Items)
            {
                this.ord.Add((ListViewItem)(item.Clone()));
            }
            ss.Show();
            this.Close();
        }
2013-04-02 14:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-402413-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.664318 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved