如何从目录中删除列表框中的选定福彩12选5走势图

蚂蚁6729

活跃成员
已加入
2019年1月22日
留言内容
26
编程经验
Beginner
大家好!

我有一个简单的代码

C#:
        private void button7_Click(object sender, EventArgs e) // ??????? ???????????? ?????????? ???????? ?????? ?? ????????
        {
            ListBox.SelectedObjectCollection selectedItems = new ListBox.SelectedObjectCollection(listBox1);
            selectedItems = listBox1.SelectedItems;


            if (listBox1.SelectedIndex != -1)
            {
                for (int i = selectedItems.Count - 1; i >= 0; i--)
                    listBox1.Items.Remove(selectedItems[i]);
            }
        }

我不仅需要从列表框中删除选定的项目,还需要从目录中删除它们,它们也属于

您能在代码中向我展示如何实现吗?
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
首先,创建一个新的SelectedObjectCollection然后立即将其丢弃并使用现有的有什么意义? “ new”关键字创建一个新对象,因此除非您确实想要一个新对象,否则不要使用它。如果您打算使用现有对象,则不需要新对象。更改此:
ListBox.SelectedObjectCollection selectedItems = new ListBox.SelectedObjectCollection(listBox1);
selectedItems = listBox1.SelectedItems;

对此:
ListBox.SelectedObjectCollection selectedItems = listBox1.SelectedItems;

也不需要指定变量的类型,因为会推断出它:
var selectedItems = listBox1.SelectedItems;


至于您的问题,您需要调用File.Delete。您只需在网络上搜索以下内容便可以轻松发现这一点"c# delete file"。您需要将要删除的福彩12选5走势图的路径作为参数传递。如果您已经在ListBox中拥有完整路径,则只需传递该项目,就需要将其强制转换为String类型。如果我记得的话,您只是在ListBox中存储福彩12选5走势图名。在这种情况下,可以使用Path.Combine从福彩12选5走势图夹路径和福彩12选5走势图名重新创建福彩12选5走势图路径。这意味着,当您首先填充ListBox时,必须将福彩12选5走势图夹路径保留在某处。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
已经提供的帮助。我告诉过你打电话给File.Delete。您在哪里尝试过这样做?您是否阅读了提供链接的文档?您是否在网上搜索示例。从这里开始,您似乎对已提供的信息没有做任何事情,因此不再提供。
 

蚂蚁6729

活跃成员
已加入
2019年1月22日
留言内容
26
编程经验
Beginner
好的
现在我的代码

C#:
[COLOR=#000000][FONT=verdana]private void listBox1_SelectedIndexChanged(object sender, EventArgs e) // ????????[/FONT][/COLOR]

[COLOR=#000000][FONT=verdana]{[/FONT][/COLOR]

[COLOR=#000000][FONT=verdana]}[/FONT][/COLOR]


[COLOR=#000000][FONT=verdana]2) [/FONT][/COLOR]


[COLOR=#000000][FONT=verdana]private void button5_Click(object sender, EventArgs e) //Adding elements[/FONT][/COLOR]

{
            FolderBrowserDialog FBD = new FolderBrowserDialog();


            if (FBD.ShowDialog() == DialogResult.OK)
            {
                listBox1.Items.Clear();
                string[] files = Directory.GetFiles(FBD.SelectedPath);
                string[] dirs = Directory.GetDirectories(FBD.SelectedPath);


                foreach (string file in files)
                {
                    listBox1.Items.Add(Path.GetFileName(file));
                }


                listBox1.Sorted = true;


                foreach (string dir in dirs)
                {
                    listBox1.Items.Add(Path.GetFileName((dir)));
                }


            }


}



[COLOR=#000000][FONT=verdana]3)[/FONT][/COLOR]

[COLOR=#000000][FONT=verdana]private void button7_Click(object sender, EventArgs e) // deleting elements and files[/FONT][/COLOR]

        {
            ListBox.SelectedObjectCollection selectedItems = listBox1.SelectedItems;




            if (listBox1.SelectedIndex != -1)
            {
                for (int i = selectedItems.Count - 1; i >= 0; i--)
                    listBox1.Items.Remove(selectedItems[i]);
            }
        }
我还能做什么?
 

蚂蚁6729

活跃成员
已加入
2019年1月22日
留言内容
26
编程经验
Beginner
好的...

C#:
private void button5_Click(object sender, EventArgs e) 
        {
            List<FileInfo> files;
            using (var fbd = new FolderBrowserDialog())
            {
                if (fbd.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                files = Directory.GetFiles(fbd.SelectedPath).Select(f => new FileInfo(f)).ToList();
            }
            listBox1.DataSource = files;
            listBox1.DisplayMember = "Name";
            listBox1.ValueMember = "FullName";
        }
//--------------------------------------------------------------------------------------------------------------
        void DeleteFiles(ListBox listBox1)
        {
            {
                for (int i = listBox1.Items.Count - 1; i >= 0; i--)
                {
                    if (listBox1.GetSelected(i))
                    {
                        System.IO.File.Delete(listBox1.Items[i].ToString());
                    }
                }
            }
        }
 //--------------------------------------------------------------------------------------------------------------

        private void button7_Click(object sender, EventArgs e) 
        {
            DeleteFiles(listBox1);
        }

但是现在我无法从列表框中删除福彩12选5走势图...
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
这是您的原始循环:
for (int i = selectedItems.Count - 1; i >= 0; i--)
    listBox1.Items.Remove(selectedItems[i]);

在该代码中,“ selectedItems'是您要删除的福彩12选5走势图的名称(也许是完整路径,但我认为是名称)。您需要做的就是添加对File.Delete的调用,并循环传递该福彩12选5走势图的完整路径。希望很明显,您需要在删除之前执行此操作,或者在删除之前将名称/路径分配给变量。我已经告诉过您如何从名称创建完整路径,因此您无需任何其他操作。
 

蚂蚁6729

活跃成员
已加入
2019年1月22日
留言内容
26
编程经验
Beginner
我尝试这样做

C#:
private void button5_Click(object sender, EventArgs e) //Adding elements


        {
            FolderBrowserDialog FBD = new FolderBrowserDialog();




            if (FBD.ShowDialog() == DialogResult.OK)
            {
                listBox1.Items.Clear();
                string[] files = Directory.GetFiles(FBD.SelectedPath);
                string[] dirs = Directory.GetDirectories(FBD.SelectedPath);


                foreach (string file in files)
                {
                    listBox1.Items.Add(Path.GetFileName(file));
                }


                listBox1.Sorted = true;
            }


            {
                List<FileInfo> files;


                using (var fbd = new FolderBrowserDialog())
                {
                    if (fbd.ShowDialog() != DialogResult.OK)
                    {
                        return;
                    }
                    files = Directory.GetFiles(fbd.SelectedPath).Select(f => new FileInfo(f)).ToList();
                }


                listBox1.DataSource = files;
                listBox1.DisplayMember = "Name";
                listBox1.ValueMember = "FullName";


            }
            
        }

接着


C#:
 private void button7_Click(object sender, EventArgs e) // ??????? ???????????? ?????????? ???????? ?????? ?? ????????
        {
            ListBox.SelectedObjectCollection selectedItems = new ListBox.SelectedObjectCollection(listBox1);
            selectedItems = listBox1.SelectedItems;




            if (listBox1.SelectedIndex != -1)
            {
                for (int i = selectedItems.Count - 1; i >= 0; i--)
                    listBox1.Items.Remove(selectedItems[i]);
                {
                    DeleteFiles(listBox1);
                }
            }


        }
        
        void DeleteFiles(ListBox listBox1)
        {
            {
                for (int i = listBox1.Items.Count - 1; i >= 0; i--)
                {
                    if (listBox1.GetSelected(i))
                    {
                        System.IO.File.Delete(listBox1.Items[i].ToString());
                    }
                }


            }
        }

但这不起作用...



1.jpg

您能否显示您的代码变体如何解决此问题?
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
也许您可以尝试阅读发布的内容。我特别指出了陷阱:
希望很明显,您需要在删除之前执行此操作,或者在删除之前将名称/路径分配给变量。
而您只是忽略了它。这是:
for (int i = selectedItems.Count - 1; i >= 0; i--)
    listBox1.Items.Remove(selectedItems[i]);
{
    DeleteFiles(listBox1);
}

做任何一件事情?

我也没有注意到您正在绑定ListBox,主要是因为它在任何地方都没有提到,只是包含在我没有正确阅读的代码中。如果已设置控件的数据源,则无法直接在控件中添加或删除项目。您必须通过数据源来完成。
 

蚂蚁6729

活跃成员
已加入
2019年1月22日
留言内容
26
编程经验
Beginner
好的

C#:
[COLOR=#333333][FONT=Consolas]for (int i = selectedItems.Count - 1; i >= 0; i--)[/FONT][/COLOR]
[COLOR=#333333][FONT=Consolas]    listBox1.Items.Remove(selectedItems[i]);[/FONT][/COLOR]
[COLOR=#333333][FONT=Consolas]{[/FONT][/COLOR]
[COLOR=#333333][FONT=Consolas]    DeleteFiles(listBox1);[/FONT][/COLOR]
[COLOR=#333333][FONT=Consolas]}[/FONT][/COLOR]

我用它...在我的第一部分(去除)


以及如何使此代码起作用...?

不是"通过数据源".


如何统一删除和删除?

这可能吗?

我的previos部分代码,我尝试在其中添加-仅适用于下一部分代码。

C#:
private void button7_Click(object sender, EventArgs e) // ??????? ???????????? ?????????? ???????? ?????? ?? ????????
        {
            ListBox.SelectedObjectCollection selectedItems = new ListBox.SelectedObjectCollection(listBox1);
            selectedItems = listBox1.SelectedItems;




            if (listBox1.SelectedIndex != -1)
            {
                for (int i = selectedItems.Count - 1; i >= 0; i--)
                    listBox1.Items.Remove(selectedItems[i]);
                {
                    DeleteFiles(listBox1);
                }
            }


        }
        


        void DeleteFiles(ListBox listBox1)
        {
            {
                for (int i = listBox1.Items.Count - 1; i >= 0; i--)
                {
                    if (listBox1.GetSelected(i))
                    {
                        System.IO.File.Delete(listBox1.Items[i].ToString());
                    }
                }
            }
        }


所以,问题是开放的...
 

蚂蚁6729

活跃成员
已加入
2019年1月22日
留言内容
26
编程经验
Beginner
C#:
private void button5_Click(object sender, EventArgs e) 


        {
            string folderName;


            DirectoryInfo dinfo = new DirectoryInfo(@"");
            FileInfo[] Files = dinfo.GetFiles("*.txt");
            folderName = dinfo.FullName; 
            //MessageBox.Show(folderName);
            foreach (FileInfo file in Files)
            {
                listBox1.Items.Add(file.Name); 
            }
        }
        private void button7_Click(object sender, EventArgs e) 


        {
            if (listBox1.SelectedIndex != -1)
            {
                //Put your folder name here..
                DirectoryInfo dinfo = new DirectoryInfo(@"");
                string folderName = dinfo.FullName;
                string filepath = Path.Combine(folderName, listBox1.Items
[listBox1.SelectedIndex].ToString());
                if (File.Exists(filepath))
                    File.Delete(filepath);
                listBox1.Items.RemoveAt(listBox1.SelectedIndex);
            }
        }
[B]?[/B]

谢谢我非常匹配))
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,567
地点
悉尼,澳大利亚
编程经验
10+
我说过,您需要从数据源而不是控件中删除项目。那是什么数据源?您可以自己设置:
                List<FileInfo> files;


                using (var fbd = new FolderBrowserDialog())
                {
                    if (fbd.ShowDialog() != DialogResult.OK)
                    {
                        return;
                    }
                    files = Directory.GetFiles(fbd.SelectedPath).Select(f => new FileInfo(f)).ToList();
                }


                listBox1.DataSource = files;
                listBox1.DisplayMember = "Name";
                listBox1.ValueMember = "FullName";

那个清单<FileInfo>是数据源,因此您需要从中删除项目。

同样,由于每个项目都是一个FileInfo,您可以使用它来删除相应的福彩12选5走势图。 FileInfo类具有Delete方法,因此您可以调用该方法进行删除。除了编写自己的方法来接收多个福彩12选5走势图并逐个删除它们之外,无法通过单个方法调用删除多个福彩12选5走势图。正如我已经说过的,不必再次赘述,您需要在删除相应项目之前删除福彩12选5走势图,或者需要将有关该福彩12选5走势图的信息保存到变量中,然后在删除项目之后使用该变量。这应该是常识,因为它与编程无关。如果我给您列出了所有已删除项目的清单,那么您是否能够从清单中获取该项目以用于某些用途?当然不是,因为它已不在列表中。不要仅仅因为您正在编程就关闭您的大脑。生活和世界规则仍然适用。
 
最佳 底部