C# 用c=FileNotFoundException更改pictureBox.Image

C# 用c=FileNotFoundException更改pictureBox.Image,c#,winforms,picturebox,C#,Winforms,Picturebox,我有一个WinC窗体的小应用程序。它工作得很好,但我不知道如何在代码中更改图片框的图像: 我的图像有以下目录: myProjectDirectory/bin/Pics/myImage.jpg 这段代码给了我一个FileNotFoundException: this.imgInvader.Image = Image.FromFile("../Pics/invader2.jpg"); 我不明白,因为我在stackoverflow上看到FromFile方法从bin/Release开始。那么../Pi

我有一个WinC窗体的小应用程序。它工作得很好,但我不知道如何在代码中更改图片框的图像:

我的图像有以下目录:

myProjectDirectory/bin/Pics/myImage.jpg

这段代码给了我一个FileNotFoundException:

this.imgInvader.Image = Image.FromFile("../Pics/invader2.jpg");
我不明白,因为我在stackoverflow上看到FromFile方法从bin/Release开始。那么../Pics/myImage.jpg应该可以工作吗


Thx使用图像的相对路径

this.imgInvader.Image = Image.FromFile(@"bin\Pics\invader2.jpg");

这里给出代码隐藏文件所在位置的路径。假设您的文件位于根目录中,并且您的图像位于bin/Pics/文件夹中,则上述代码可以工作。它会自动获取与程序运行位置相关的路径。

尝试引用可执行输出目录之外的图像文件是非常脆弱的。有很多方法可能出错不幸的是,你的问题中没有足够的上下文让任何人确切地知道这些方法中的哪一种是你的具体问题

如果必须使用磁盘上的文件存储映像资源,则应将它们复制到生成输出目录(即Release)中并在其中引用。将该文件添加到Visual Studio项目中,选择它,然后在“属性”窗口中,将“生成操作”值设置为“内容”。如果文件位于项目下的文件夹中,则它也将复制到输出目录中同名的文件夹中

如果您确实使用磁盘上的文件,另一件确保您这样做的事情是找到可执行文件的目录,例如通过Path.GetDirectoryNameAssembly.GetEntryAssembly.Location,然后将其与您期望的相对路径相结合,例如仅文件名,或在项目中为其指定的任何文件夹/子目录下的文件名,如果使用Path.Combine方法,然后使用该绝对文件名作为源。否则,您的代码可能会被程序中其他地方对当前目录所做的更改弄糊涂。基本上,永远不要依赖当前目录……这样的全局状态很容易混淆,一旦您养成了使用它的习惯

例如:

string exeDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
string imageFileName = Path.Combine(exeDirectory, "invader2.jpg");

现在,我想最好是将图像作为资源添加到可执行文件中,然后从Properties.resources类中引用它们。然后图像总是与可执行文件在一起,因为它们在同一个文件中。代码也简单得多,因为您只是引用Resources类中的属性,这些属性返回您需要的实际图像对象。

正如前面的注释所述,不建议使用exe之外的资源,但是您仍然可以使用Path.GetDirectoryName方法来执行此操作


我不禁要问,为什么您的资源基于exe之外,为什么不将其嵌入位于properties>resources.resx中的资源中,并简单地用imgInvader.Image=properties.resources.FileNamehere调用它;这比信任外部环境要安全得多。

嗨,这不起作用,我收到了相同的消息FileNotFoundException。我的项目在E:\DropBox\DropBox\C\Proejcts\MyProjects\bin\pics上。请尝试上载异常的屏幕截图,以便我知道是什么问题。下面的消息是:为了确保,你能检查一下bin/Pics文件夹中是否有该图像,并检查拼写。你能告诉我你写代码的文件的位置吗。它的目录。