none
为什么我的listview.items.insert表现出来的功能跟Add是一样的? RRS feed

  • 问题

  •  

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsApplication10
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            ListViewItem item = null;
    
            private void button1_Click(object sender, EventArgs e)
            {
                lstName.Clear();
                imageList1.Images.Add("0",Image.FromFile(Application.StartupPath + "\\backgroud.jpg"));
                imageList1.Images.Add("1", Image.FromFile(Application.StartupPath + "\\0019_b1.jpg"));
                imageList1.Images.Add("2", Image.FromFile(Application.StartupPath + "\\Loli——蓝.png"));
                ListViewItem item1 = new ListViewItem();
                item1.ImageIndex = 0;
                lstName.Items.Add(item1);
                ListViewItem item2 = new ListViewItem();
                item2.ImageIndex = 1;
                lstName.Items.Add(item2);
                ListViewItem item3 = new ListViewItem();
                item3.ImageIndex = 2;
                lstName.Items.Add(item3);
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                item = lstName.Items[0];
                lstName.Items.RemoveAt(0);
                
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                //lstName.Items.Insert(1, item);
                lstName.Items.Insert(0, "", "", 0);
            }
        }
    }
    

    代码下载:http://dl.dropbox.com/u/52714692/WindowsApplication10.rar

     


    2011年12月30日 3:09

答案

  • 信已经收到了。

    终于明白在讨论什么了。

    要使用insert方法加入指定位置的item的时候,必须要设置一个排序才可以。否则只能加在所有的item的最后。

    http://msdn.microsoft.com/zh-cn/library/xf54248d.aspx

    请注意连接中的note。 我测试过了。是可以实现的,只需要指定排序为:Ascending就好了。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月4日 6:36
    版主
  • 我也明白了,listview的sorting的默认设置的是none,但是如果要使用insert的话,就必须给他的sorting设置成非none的值,insert的原理就是先插入最后一个,然后默认进行一次排序,按照你设置的sorting来排序

    没有认真看msdn文档啊。。以后要改进。。

    2012年1月4日 7:20

全部回复

  • 补充:

    是的,而且我还检测出一个问题——

    就是当点击Add以后,先点击change按钮Remove第一个图片,点击Insert插入到最后,再次点击change,remove竟然是最后一张图片了!Why?


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年12月30日 4:06
    版主
  • 可能是listView设置为largeIcon 的时候,产生的幻觉。

    因为我测试的时候用list 的显示方式是跟预期的结果是一样的。

    而且就这段程序中,你move和insert的图片都是一样的,没什么区别。你可以给item加上text或者其他属性值,然后在调试一下,看是不是还是一样的效果。

    我用的是Visual Studio 2010 和.Net 4.0

    edit:但是当我在点击增加的时候,如果指定item的index为0的话,move的就是新添加的。而不是按照原来的index为0的。以我个人的观点,listview在添加新item的时候,指定的index为0,那之前的所有的item的index都需要重新排序指定,重新赋值。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us


    2012年1月2日 8:30
    版主
  • 可能是listView设置为largeIcon 的时候,产生的幻觉。

    因为我测试的时候用list 的显示方式是跟预期的结果是一样的。

    而且就这段程序中,你move和insert的图片都是一样的,没什么区别。你可以给item加上text或者其他属性值,然后在调试一下,看是不是还是一样的效果。

    我用的是Visual Studio 2010 和.Net 4.0

    edit:但是当我在点击增加的时候,如果指定item的index为0的话,move的就是新添加的。而不是按照原来的index为0的。以我个人的观点,listview在添加新item的时候,指定的index为0,那之前的所有的item的index都需要重新排序指定,重新赋值。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us


    这个还能用幻觉来说明。。- -!不知道能不能算是个bug提交上去。。(不知道怎么提交bug给ms)
    帮助大家解决问题咯~~小站:http://www.cnblogs.com/knightluffy/
    2012年1月4日 4:32
  • 可能是listView设置为largeIcon 的时候,产生的幻觉。

    因为我测试的时候用list 的显示方式是跟预期的结果是一样的。

    而且就这段程序中,你move和insert的图片都是一样的,没什么区别。你可以给item加上text或者其他属性值,然后在调试一下,看是不是还是一样的效果。

    我用的是Visual Studio 2010 和.Net 4.0

    edit:但是当我在点击增加的时候,如果指定item的index为0的话,move的就是新添加的。而不是按照原来的index为0的。以我个人的观点,listview在添加新item的时候,指定的index为0,那之前的所有的item的index都需要重新排序指定,重新赋值。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us


    这个还能用幻觉来说明。。- -!不知道能不能算是个bug提交上去。。(不知道怎么提交bug给ms)
    帮助大家解决问题咯~~小站:http://www.cnblogs.com/knightluffy/
    请这里提交:http://connect.microsoft.com
       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月4日 4:39
    版主
  • connect 好像只支持英文的。所以请尽量用英语提交。

    还有我不知道是我不明白你的问题还是怎么着。我为什么就不能重现你们所说的诡异的行为呢?


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月4日 4:53
    版主
  • connect 好像只支持英文的。所以请尽量用英语提交。

    还有我不知道是我不明白你的问题还是怎么着。我为什么就不能重现你们所说的诡异的行为呢?


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    你好:)

    这个问题我也发现了,请问是否尝试下载过楼主的代码?先点击“Add”,然后点击change,最后点击Insert就会发现该问题。

    以下是我的Video运行结果,请直接点击下载,然后双击I.htm看录像你就知道了!谢谢!!!

    我也想知道为什么……?

     


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月4日 5:18
    版主
  • connect 好像只支持英文的。所以请尽量用英语提交。

    还有我不知道是我不明白你的问题还是怎么着。我为什么就不能重现你们所说的诡异的行为呢?


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    你好:)

    这个问题我也发现了,请问是否尝试下载过楼主的代码?先点击“Add”,然后点击change,最后点击Insert就会发现该问题。

    以下是我的Video运行结果,请直接点击下载,然后双击I.htm看录像你就知道了!谢谢!!!

    我也想知道为什么……?

     


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    点哪里下载?
    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月4日 5:23
    版主
  • 这里似乎无法上传打包文件……额……请留下你的Email地址,我给你发过去你的录像,谢谢!
       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月4日 5:28
    版主
  • rocky_msn@hotmail.com

    谢谢


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月4日 5:29
    版主
  • rocky_msn@hotmail.com

    谢谢


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    OK,已经发送;请检查来信(包括垃圾箱中),以免错误被过滤了,谢谢!
       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月4日 5:33
    版主
  • 信已经收到了。

    终于明白在讨论什么了。

    要使用insert方法加入指定位置的item的时候,必须要设置一个排序才可以。否则只能加在所有的item的最后。

    http://msdn.microsoft.com/zh-cn/library/xf54248d.aspx

    请注意连接中的note。 我测试过了。是可以实现的,只需要指定排序为:Ascending就好了。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月4日 6:36
    版主
  • 可是为什么需要先排序然后才可以插入呢?难道说有什么奥秘么?谢谢
       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月4日 6:41
    版主
  • 不是,程序的设定是先加入,然后排序之后重新加载显示到控件上的。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月4日 6:43
    版主
  • 不是,程序的设定是先加入,然后排序之后重新加载显示到控件上的。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    也就是说,ListView建议使用的时候最好排序形式出现,可以这样理解吗?谢谢了。麻烦了
       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2012年1月4日 6:44
    版主
  • 也不能一砖头拍死,看情况吧。

    像用add 和addrange方法的时候就不用排序。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月4日 6:47
    版主
  • 我也明白了,listview的sorting的默认设置的是none,但是如果要使用insert的话,就必须给他的sorting设置成非none的值,insert的原理就是先插入最后一个,然后默认进行一次排序,按照你设置的sorting来排序

    没有认真看msdn文档啊。。以后要改进。。

    2012年1月4日 7:20
  • 很高兴当了一次老师,还没误人子弟。

    我们一起努力把技术学精通吧。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月4日 8:33
    版主