0

そのため、小さな C# プロジェクトで Listbox を使用する必要があり、問題が発生しました。リストボックスにはファイル名が表示され、誰かがファイル ダイアログ ボックスを使用してアイテムを追加するたびにアイテムが追加されます。問題は、最初のファイルが追加されたときに何も表示されないことです。しかし、2 番目のファイルが追加されると、その行は空になります。

問題を説明するための図を次に示します。

リストボックスの問題

さて、最初の空白行を取り除き、ファイル名をリストボックスの一番上に適切に追加するにはどうすればよいでしょうか?

リストボックスに追加するために使用しているコードは次のとおりです。

// 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 プロパティと同様に

1a1s 21

4

3 に答える 3

1

リストボックスのプロパティで、 DrawMode をOwnerDrawFixedではなくNormalに変更してみてください。

于 2012-07-20T17:27:16.270 に答える
0

不明。ここで何を達成しようとしているのかわからない。コードには奇妙なことがいくつかあります(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));
            }
        }
    }
}
于 2012-07-20T17:03:43.873 に答える
0

このコードを試して、何が起こるか見てください。

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());
        }
    }
}
于 2012-07-20T16:58:19.230 に答える