我正在快速填写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:如果需要,我会发布一个新问题。
答案 0 :(得分:1)
根据我对您的问题的理解,我认为这可能是您正在寻找的问题How to auto scroll down in WinForms ListView control when update new item?。
答案 1 :(得分:0)
另一个想法是使用Items.Insert()
插入顶部(Index=0)
的每个项目。我最近使用我创建的事件查看器做到了,它似乎运行良好。