ListView反向垂直滚动方向

时间:2015-11-17 11:36:50

标签: c# winforms listview

我正在快速填写ListView,搜索长目录路径。

ListView更新非常不稳定,垂直滚动条上升,滚动条要做的是向下滚动,因为数据被添加到ListView,我希望它会停止结果的闪烁。 / p>

您可以使用以下代码创建ListBox,但我无法使用ListView找到类似内容。

lstBoxResults2.Items.Add(value);
lstBoxResults2.TopIndex = lstBoxResults2.Items.Count - 1;
lstBoxResults2.Update();

我已经尝试将排序属性设置为升序或降序但是也不起作用,我在结果中得到一个奇怪的结果,即找到的路径没有按行程顺序显示,即

Folder 1...
Folder 2...
Folder 2...
Folder 1...
etc.

以下代码。

listView1.View = View.Details;
listView1.GridLines = true;
listView1.Columns.Add("Length", -2, HorizontalAlignment.Left);
listView1.Columns.Add("Path", 1800);

//Test length 150
//static int MAX_DIR_PATH = 150;
static int MAX_DIR_PATH = 260;    

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        btnStop.Enabled = true;
        if (rBtnFolders.Checked == true)
        {
            try
            {
                this.Invoke(new Action(() => lblStatus.Text = "Scanning..."));
                foreach (string dir in Directory.EnumerateDirectories(txtPath.Text, "*.*", SearchOption.AllDirectories))
                {
                    if (backgroundWorker1.CancellationPending)
                    {
                        e.Cancel = true;
                        //backgroundWorker1.ReportProgress(0);
                        return;
                        //break;
                    }
                    this.Invoke(new Action(() => listUpdate1(dir + Environment.NewLine)));
                    try
                    {
                        if (dir.Length >= MAX_DIR_PATH)
                        {
                         this.Invoke(new Action(() => listView1.Items.Add(dir.Length.ToString()).SubItems.Add(dir)));
                            this.Invoke(new Action(() => lblCount.Text = listView1.Items.Count.ToString()));                            }
                        }
                    catch (Exception err)
                    {
                        // This code just logs the message and continues to recurse.
                        log.Add(err.Message);
                    }
                }
            }
            catch (Exception err)
            {
                // This code just logs the message and continues to recurse.
                log.Add(err.Message);
            }
        }

在旁注上随意批评代码,出于某种原因,上面的内容不会在连接到我的PC(驱动器M :)的raid框上递归搜索,但是它会连接到USB记忆棒上(J:如果需要,我会发布一个新问题。

2 个答案:

答案 0 :(得分:1)

根据我对您的问题的理解,我认为这可能是您正在寻找的问题How to auto scroll down in WinForms ListView control when update new item?

答案 1 :(得分:0)

另一个想法是使用Items.Insert()插入顶部(Index=0)的每个项目。我最近使用我创建的事件查看器做到了,它似乎运行良好。