2

在这种情况下,我使用 Image.FromFile(string) 方法:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GVEMO
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            PaintBackground();
        }
        public void PaintBackground() {
            gameBoard.Image = Image.FromFile("gvemoBack.jpg");
        }
    }
}

gameBoard 是图片框的名称。但是当我启动这个程序时,我得到了异常 FileNotFound。图像位于主目录中(包含文件夹 bin、类、属性等的目录)我尝试将此图像复制到所有项目目录中,但仍然存在异常。该图像必须在哪个目录中或我做错了什么?我使用 VS2012 和 .NET 框架 4.5 版。谢谢

4

7 回答 7

4

图像必须在当前工作目录中。在启动时,这是您启动应用程序的目录,这可能是可执行文件所在的目录(但不能是)。请注意,此工作目录可能会更改!

我建议您使用另一种机制,而不是使用路径。FileOpenDialog如果您使用例如,当前工作目录可以设置为不同的东西。因此,您最好使用图像所在目录的资源或设置。

于 2013-03-31T13:34:48.327 回答
3

由于您使用了相对路径,因此图像必须位于工作目录中。当您启动可执行文件时,除非您另外指定,否则工作目录将设置为可执行文件所在的目录。显然图像不存在。

由于很难控制工作目录,尤其是在 GUI 应用程序中,因此通常最好指定完整的绝对路径而不是相对路径。例如:

string dir = Path.GetDirectoryName(Application.ExecutablePath);
string filename = Path.Combine(dir, @"MyImage.jpg");

但是,对于您的方案来说,更好的方法是将图像作为资源包含在内,从而使您的可执行文件自包含。然后,您无需担心诸如确保图像与可执行文件位于同一目录中的细节。

于 2013-03-31T13:35:39.777 回答
3

确保您的文件在解决方案资源管理器中可见。如果没有,请单击Show All Files解决方案资源管理器中的按钮,右键单击图像,然后单击“包含在项目中”。

如果您的文件可见,则通过右键单击解决方案资源管理器中的图像,选择属性并确保将Copy to Output Directory选项设置为Copy if newer或,确保将图像复制到输出目录Copy always

于 2013-03-31T13:36:08.840 回答
1

正如 jdehaan 已经说过的,图像应该(通常)与您的可执行文件位于同一目录中。这很可能bin\Debug是您的情况。

如果这是一个静态图像,您也可以将它嵌入到您的程序集中。查看在项目中嵌入图像资源

于 2013-03-31T13:35:37.410 回答
0

请确保图像与应用程序可执行文件位于同一目录中。

于 2013-03-31T13:35:19.930 回答
0

如果不指定路径,则使用当前目录。

您可以使用相对路径:

./xxx/yyy/file.ext
../../xxx/yyy/file.ext

或绝对路径:

/xxx/yyy/file.ext

或在启动程序之前或在其执行期间更改目录(依赖于语言/平台的解决方案)

于 2013-03-31T13:44:57.037 回答
0

即使我有同样的问题。

我这样做是为了让它正常工作:

如果图像文件直接添加到项目中: 1.右键单击图像->属性窗口->从“复制”下拉菜单中选择“始终复制”或“如果较新则复制”。

就是这样。

于 2019-08-08T09:55:41.163 回答