2014-03-31 67 views
0

现在,我正在开发一个winfroms应用程序。我需要创建一个自定义控件。我的自定义控件使用图片。我不想将这些图片存储在项目资源文件中。我可以在哪里存储自定义控件的图像?

global::Wrigley_Data_Mart_Manager_2.Properties.Resources.previous_16x16; 

我想将图片存储在自定义控件的资源文件中。但是非常不舒服。 (设计师总是从那里删除图片)。我可以在哪里存储自定义控件的图像?我想我的自定义控件是自给自足的,它可以用于其他项目。

+0

你想如何重用控件?如果你打算从项目的dll中使用它,它是否真的无论是否存储在项目资源或没有,只要它是在同一个项目的控制是... – derape

+0

例如,我创建了一个ExpandPanel(使用2个按钮图像)控件,我想在每个项目中使用它。 (简单的格格并从表单上的工具箱中删除) – isxaker

回答

2

如果你不想使用资源(RESX),那么你总是可以包括项目作为嵌入资源中的图像文件。

您将创建一个文件夹来保存图像,并调用“添加现有”,将您想要嵌入的图像添加到项目中。然后在属性窗口中为每个文件选择“Build Action”选项,突出显示“Embedded Resource”选项。

要访问该文件,你会打电话Assembly.GetManifestResourceStream(string)与项目的完整的命名空间+项目内的文件夹路径:

例如,对于项目名称:“MyCompany.MyTestProject”和您存储在“影像”文件夹作为“图像/ image1.gif”图像(多个),

命名空间将被:

Assembly.GetManifestResourceStream("MyCompany.MyTestProject.Images.image1.gif") 
1

替代方案可以将它们转换为字节数组并将它们作为BLOB存储在数据库中。

public byte[] imageToByteArray(System.Drawing.Image imageIn) 
{ 
    MemoryStream ms = new MemoryStream(); 
    imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); 
    return ms.ToArray(); 
} 

然后将其转换回:

public Image byteArrayToImage(byte[] byteArrayIn) 
{ 
    MemoryStream ms = new MemoryStream(byteArrayIn); 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 
相关问题