【问题标题】:Listbox in C# has an empty line when an item is added?添加项目时C#中的列表框有一个空行?
【发布时间】:2012-07-19 23:40:17
【问题描述】:

所以,我不得不在一个小型 C# 项目中使用 Listbox,但遇到了问题。列表框显示文件名,每次有人使用文件对话框添加项目时都会添加一个项目。问题是当添加第一个文件时,什么也没有出现。但是当添加第二个文件时,它是一个空行。

用一张图来说明问题:

现在,我如何去掉第一个空行并正确地将文件名添加到列表框的顶部?

这是我用来添加到列表框的代码。

// Set a global variable to hold all the selected files result
List<String> fullFileName;

private void addBtn_Click(object sender, EventArgs e)
{
    DialogResult result = fileDialog.ShowDialog(); // Show the dialog.
    if (result == DialogResult.OK) // Test result.
    {
       // put the selected result in the global variables
       fullFileName = new List<String>(fileDialog.FileNames);
       // add just the names to the listbox
       foreach (string fileName in fullFileName)
       {
           dllBox.Items.Add(fileName.Substring(fileName.LastIndexOf(@"\") + 1));
       }
   }
}

这是 fileDialog 的属性:

以及 dllBox 属性

【问题讨论】:

  • 这对我有什么帮助?我需要摆脱空的列表框行。
  • 您的代码在我使用时运行良好。我猜这是 WinForms?
  • 能否提供您在 ddlBox 和 fileDialog 上设置的属性?
  • @jaypeagi,是的,这是 Winforms,我将编辑属性。
  • 可能控件一开始有一个空行,不小心弄错了。在添加第一项之前尝试清除它。

标签: c# winforms listbox string


【解决方案1】:

试试这段代码,看看会发生什么。

private void button1_Click(object sender, EventArgs e)
{
    using (var dialog = new OpenFileDialog())
    {
        dialog.Multiselect = true;
        if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            listbox.Items.Clear();
            listbox.Items.AddRange(dialog.FileNames.Select(x => System.IO.Path.GetFileName(x)).ToArray());
        }
    }
}

【讨论】:

  • @Silkut 我故意添加了明确的内容,以防在 Items.AddRange 之前的列表中已经有一个 emtpy 项目。如果 OP 不想每次都清空列表,可以自己移除。
【解决方案2】:

不清楚。不确定您要在这里实现什么。您的代码中还有一些奇怪的东西(string file = ... 从未使用过,fullFileName 每次都会获得一个新实例,不知道 fileDialog 在哪里实例化...)。

尝试以下方法:

private void button1_Click(object sender, EventArgs e)
{
    // Adds the selected file to the list
    using (OpenFileDialog dlg = new OpenFileDialog
        {
            Multiselect = false
        })
    {
        if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            this.listBox1.Items.Add(Path.GetFileName(dlg.FileName));
        }
    }
}

private void button2_Click(object sender, EventArgs e)
{
    // Adds all selected files to the list
    using (OpenFileDialog dlg = new OpenFileDialog
    {
        Multiselect = true
    })
    {
        if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            foreach (var fileName in dlg.FileNames)
            {
                this.listBox1.Items.Add(Path.GetFileName(fileName));
            }
        }
    }
}

【讨论】:

  • 基本上,列表框中的第一行始终是空白的,我想将其删除,仅此而已。
  • @TheEliteNoob 您是否使用多选?您同时使用了 FileName 和 FileNames...还阐明了我回答中的第一个问题...
  • 好的,抱歉,字符串文件无所谓,之前有,编辑掉了。 fileDialog在winForms中实例化,(拖放到项目上)
【解决方案3】:

尝试在列表框属性中将 DrawMode 更改为 Normal 而不是 OwnerDrawFixed

【讨论】:

  • 谢谢,但什么也没做。
  • 奇怪。我正在使用您提供的原始代码,它对我来说很好。我将所有属性设置为您发布的属性,这是唯一导致错误添加项目的属性。
  • 很好,我会在另一台电脑上试试,看看会发生什么。
  • 谢谢,事实证明它有效。我重置了控件并再次更改了设置,使其正常工作。谢谢!接受!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多