【问题标题】:Select and display Image files from ListBox, to be display within PictureBox? C#从 ListBox 中选择并显示要在 PictureBox 中显示的图像文件? C#
【发布时间】:2013-01-25 02:29:54
【问题描述】:

我正在尝试使我的列表框 (lstFiles) 可选择,因此它能够在图片框 (pictureBox1) 中显示图像文件,并在从中选择另一个文件后进行更改listBox,我正在创建一个可以拍摄照片的网络摄像头程序,但在显示图像时遇到了问题。

我尝试了很多方法,但无法通过从列表框中选择文件名来使其工作

任何帮助将不胜感激,谢谢

这是我目前所拥有的:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using Pinvoke;
using System.IO;

namespace TestAvicap32
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitializeDevicesList();
        }

        private void InitializeDevicesList()
        {
            splitContainer1.Panel1.Enabled = true;
            splitContainer1.Panel2.Enabled = false;

            foreach (CaptureDevice device in CaptureDevice.GetDevices())
            {
                cboDevices.Items.Add(device);
            }

            if (cboDevices.Items.Count > 0)
            {
                cboDevices.SelectedIndex = 0;
            }
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            int index = cboDevices.SelectedIndex;
            if (index != -1)
            {
                splitContainer1.Panel1.Enabled = false;
                splitContainer1.Panel2.Enabled = true;
                ((CaptureDevice)cboDevices.SelectedItem).Attach(pbImage);
            }
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            splitContainer1.Panel1.Enabled = true;
            splitContainer1.Panel2.Enabled = false;
            ((CaptureDevice)cboDevices.SelectedItem).Detach();
        }

        private void btnSnapshot_Click(object sender, EventArgs e)
        {
            try
            {
                Image image = ((CaptureDevice)cboDevices.SelectedItem).Capture();
                image.Save(@"c:\webcapture\" + DateTime.Now.ToString("HH.mm.ss-dd-MM-yy") + ".png", ImageFormat.Png);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }   
        }

        private void btntimer_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            btntimerstop.Visible = true;
            btntimer.Visible = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Image image = ((CaptureDevice)cboDevices.SelectedItem).Capture();
            image.Save(@"c:\webcapture\" + DateTime.Now.ToString("HH.mm.ss-dd-MM-yy") + ".png", ImageFormat.Png);
        }

        private void btntimerstop_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
            btntimer.Visible = true;
            btntimerstop.Visible = false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            btntimerstop.Visible = false;

            foreach (DriveInfo di in DriveInfo.GetDrives())
                lstDrive.Items.Add(di);
        }

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

            DirectoryInfo dir = (DirectoryInfo)lstFolders.SelectedItem;

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

        private void lstDrive_SelectedIndexChanged(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 lstFiles_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            //I don't know If I need this?
        }

        }
   }

【问题讨论】:

    标签: c# listbox picturebox


    【解决方案1】:

    尝试如下...它会工作....

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

    【讨论】:

    • 非常感谢您的评论,我将它放在 lstFiles 中,但出现了一些错误 - “类型或命名空间名称 'Item ' 找不到(您是否缺少 using 指令或程序集引用?”以及“当前上下文中不存在名称 'selectedFile'”
    • @user1735692 可能会这样做:pictureBox1.Image = Image.FromFile(((FileInfo)lstFiles.SelectedItem).FullName);,但我无法验证。
    • 感谢您的评论,我仍然收到此错误“找不到类型或命名空间名称 'Items'(您是否缺少 using 指令或程序集参考?)”
    • @bod4000 删除所有其他行,仅使用我发布的行。如果它有效,我会修改答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多