在这种情况下我使用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是pictureBox的名称。但是当我启动这个程序时,我得到异常FileNotFound。图像位于主目录(带有文件夹bin,类,属性等的目录)中。我尝试将此图像复制到所有项目目录中,但异常仍然存在。在哪个目录必须是这个图像或我做错了什么?我使用VS2012和.NET framework 4.5。谢谢
答案 0 :(得分:4)
图像必须位于当前工作目录中。在启动时,这是从中启动应用程序的目录,这可能是可执行文件所在的目录(但不能是)。请注意,此工作目录可以更改!
我建议您使用其他机制,而不是使用路径。如果您使用FileOpenDialog
,则可以将当前工作目录设置为不同的值。因此,最好使用资源或图像所在目录的设置。
答案 1 :(得分:3)
由于您使用了相对路径,因此映像必须位于工作目录中。启动可执行文件时,除非另行指定,否则工作目录将设置为可执行文件所在的目录。显然,图像不存在。
由于很难扩展对工作目录的控制,特别是在GUI应用程序中,通常最好指定完整的绝对路径而不是相对路径。例如:
string dir = Path.GetDirectoryName(Application.ExecutablePath);
string filename = Path.Combine(dir, @"MyImage.jpg");
但是,对于您的场景来说,更好的方法是将图像作为资源包含在内,从而使您的可执行文件自包含。然后,您无需担心细节,例如确保图像与可执行文件位于同一目录中。
答案 2 :(得分:3)
确保您的文件在解决方案资源管理器中可见。如果没有,请单击解决方案资源管理器中的Show All Files
按钮,右键单击该图像,然后单击“包含在项目中”。
如果您的文件可见,请通过右键单击解决方案资源管理器中的图像,选择属性并确保将Copy to Output Directory
选项设置为,确保将图像复制到输出目录Copy if newer
或Copy always
。
答案 3 :(得分:1)
正如jdehaan所说,图像应该(通常)与可执行文件位于同一目录中。在您的情况下,Thas很可能是bin\Debug
。
如果这是静态图像,您也可以将其嵌入到程序集中。请看Embedding Image Resources in a Project。
答案 4 :(得分:0)
请确保该图像与应用程序可执行文件位于同一目录中。
答案 5 :(得分:0)
如果未指定路径,则使用当前目录。
您可以使用相对路径:
./xxx/yyy/file.ext
../../xxx/yyy/file.ext
或绝对路径:
/xxx/yyy/file.ext
或在启动程序之前或执行期间更改目录(语言/平台相关解决方案)
答案 6 :(得分:0)
即使我有同样的问题。
我这样做是为了使其正常工作:
如果图像文件直接添加到项目中: 1.右键单击图像->“属性”窗口->从“复制”下拉菜单中选择“始终复制”或“如果更新则复制”。
就是这样。