0

是否可以仅显示具有特定格式的某些文件的列表框内容?就像我想在列表框中BMP|*.bmp|GIF|*.gif|JPG|*.jpg;*.jpeg|PNG|*.png|TIFF|*.tif;*.tiff显示的具有这些扩展名的文件一样。lstFiles

我试过了,

lstFiles.Filter = "BMP|*.bmp|GIF|*.gif|JPG|*.jpg;*.jpeg|PNG|*.png|TIFF|*.tif;*.tiff";

但这不起作用,有可能吗?

编辑:

我有三个联合列表框来显示系统驱动器、文件夹及其内容

private void lstDrive_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            lstFolders.Items.Clear();

            try
            {
                DriveInfo drive = (DriveInfo)lstDrive.SelectedItem;

                foreach (DirectoryInfo dirInfo in drive.RootDirectory.GetDirectories())
                    lstFolders.Items.Add(dirInfo);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void lstFolders_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            lstFiles.Items.Clear();

            DirectoryInfo dir = (DirectoryInfo)lstFolders.SelectedItem;

            foreach (FileInfo fi in dir.GetFiles())
                lstFiles.Items.Add(fi);
        }

        private void lstFiles_SelectedIndexChanged(object sender, EventArgs e)
        {
            pictureBox1.Image = Image.FromFile(((FileInfo)lstFiles.SelectedItem).FullName);

        }

        private int lastIndex = 0;

        private void lstFiles_KeyUp(object sender, KeyEventArgs e)
        {

            if (lstFiles.SelectedIndex == lastIndex)
            {
                if (e.KeyCode == Keys.Up)
                {
                    lstFiles.SelectedIndex = lstFiles.Items.Count - 1;
                }

                if (e.KeyCode == Keys.Down)
                {
                    lstFiles.SelectedIndex = 0;
                }

            }

            lastIndex = lstFiles.SelectedIndex;
        }
    }
}
4

2 回答 2

2

您正在使用FileInfo对象自己填充列表框。FileInfo有财产Extension。您可以使用该过滤器:

    private void lstFolders_SelectedIndexChanged_1(object sender, EventArgs e)
    {
        lstFiles.Items.Clear();

        DirectoryInfo dir = (DirectoryInfo)lstFolders.SelectedItem;

        foreach (FileInfo fi in dir.GetFiles())
            switch(fi.Extension.ToUpperInvariant())
            {
               case ".BMP":
               case ".JPG":
               ...
                    lstFiles.Items.Add(fi);
                    break;
             }
     }
于 2013-02-12T20:56:52.053 回答
0

好的,我个人不知道,也从未听说过在列表框中使用“过滤器”。当你有列表时,为什么不直接添加你想要的项目?

lstFiles.Items.Clear();

List<string> allowedExtensions = new List<string>() {".jpg", ".png", ".gif"};

DirectoryInfo dir = (DirectoryInfo)lstFolders.SelectedItem;

foreach (FileInfo fi in dir.GetFiles().Where((x)=>allowedExtensions.Contains(x)))
{
    lstFiles.Items.Add(fi);
}
于 2013-02-12T21:02:39.550 回答