0

現在、ディレクトリを調べて .jpg ファイルを見つけ、結果をリストボックスに表示しようとしています。それが終わったら、画像を選択してピクチャボックスに表示したいと思います。

これは私が持っているコードです:

    private void Form1_load(object sender, EventArgs e)
    {
        string filepath = "F:\\Apps Development\\Coursework\\3_Coursework\\3_Coursework\\bin\\Debug\\Pics";
        DirectoryInfo dirinfo = new DirectoryInfo(filepath);
        FileInfo[] images = dirinfo.GetFiles("*.jpg");
        foreach (FileInfo image in images) 
        {  
            lstImages.Items.Add(image.Name);
        }
    }

    private void lstImages_SelectedIndexChanged(object sender, EventArgs e)
    {
        string filepath = "F:\\Apps Development\\Coursework\\3_Coursework\\3_Coursework\\bin\\Debug\\Pics";
        pictureBox1.ImageLocation = filepath + lstImages.SelectedItem.ToString();
        pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
        pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
    }

これはうまくいくように見えます。しかし、それは私が望むものをリストに入力しません。何か案は?

4

3 に答える 3

0

これを試して :

//load all image here
public Form1()
{
    InitializeComponent();
    //set your directory
    DirectoryInfo myDirectory = new DirectoryInfo(@"E:\MyImages");
    //set file type
    FileInfo[] allFiles = myDirectory.GetFiles("*.jpg");
    //loop through all files with that file type and add it to listBox
    foreach (FileInfo file in allFiles)
    {
            listBox1.Items.Add(file);
    }
}

//bind clicked image with picturebox
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    //Make selected item an image object
    Image clickedImage = Image.FromFile(@"E:\MyImages\" + listBox1.SelectedItem.ToString());
    pictureBox1.Image = clickedImage;
    pictureBox1.Height = clickedImage.Height;
    pictureBox1.Width = clickedImage.Width;
}
于 2013-10-30T18:28:43.280 に答える
0

パス変数をクラスのメンバーにする必要があります。このようにして、両方の方法が同じパスを使用することを確認できます。しかし、これはあなたの問題の原因ではありません。画像の場所を構成するときに欠落しているスラッシュです(@varocarbasがコメントですでに述べているように)。

このような問題を回避するには、静的Pathクラスを使用する必要があります。リストへの入力は、LINQ を使用してよりエレガントに行うこともできます。

string filepath = @"F:\Apps Development\Coursework\3_Coursework\3_Coursework\bin\Debug\Pics";

private void Form1_load(object sender, EventArgs e)
{
    lstImages.Items.AddRange(Directory.GetFiles(filepath, "*.jpg")
                                      .Select(f => Path.GetFileName(f)).ToArray());
}

private void lstImages_SelectedIndexChanged(object sender, EventArgs e)
{
    pictureBox1.ImageLocation = Path.Combine(filepath, lstImages.SelectedItem.ToString());
}
于 2013-10-30T18:45:05.253 に答える