【问题标题】:Where i can store image for custom control?我可以在哪里存储自定义控件的图像?
【发布时间】:2014-03-31 13:01:33
【问题描述】:

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

global::Wrigley_Data_Mart_Manager_2.Properties.Resources.previous_16x16;

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

【问题讨论】:

  • 你想如何重用控件?如果您要从项目 dll 中使用它,那么它是否存储在项目资源中并不重要,只要它位于控件所在的同一个项目中......
  • 例如,我创建了一个 ExpandPanel(使用 2 个图像作为按钮)控件,我想在我的每个项目中使用它。 (从表单上的工具箱中简单地拖放)

标签: c# .net winforms custom-controls resx


【解决方案1】:

如果您不想使用资源 (resx),则可以始终将图像文件作为嵌入资源包含在项目中。

您将创建一个文件夹来保存图像,然后调用“添加现有”,添加您想要嵌入到项目中的图像。然后在每个文件的“属性”窗口中,对于 “构建操作” 选项,突出显示 “嵌入式资源” 选项。

要访问该文件,您可以使用项目的完整命名空间 + 项目中的文件夹路径调用 Assembly.GetManifestResourceStream(string)

例如,项目名称为:"MyCompany.MyTestProject",并且您将图像存储在 "Images" 文件夹中为 "Images/ image1.gif",

命名空间将是:

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

【讨论】:

    【解决方案2】:

    另一种方法是将它们转换为字节数组并将它们作为 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      相关资源
      最近更新 更多