自定义图像从嵌入资源返回null

时间:2017-12-28 14:21:44

标签: c# winforms

我正在尝试从我的解决方案中加载一个图像,该图像被嵌入为jpg,但它说它没有找到。 我正在声明这两个图像

Image selectedImage = null;
Image emptyImage = null;
selectedImage = Image.FromStream(System.Reflection.Assembly.
GetExecutingAssembly().GetManifestResourceStream(@"selected.png"));

emptyImage = Image.FromStream(System.Reflection.Assembly
.GetExecutingAssembly().GetManifestResourceStream(@"empty.png"));

我需要自定义绘制一个复选框,以便保留样式 您可以看到图像包含在我的解决方案中

enter image description here

并且它们都被选为嵌入资源 enter image description here

enter image description here

然后我使用此自定义功能将复选框图像绘制到约会上

private void dxsourceNetAppointments_CustomDrawAppointment(object sender, CustomDrawObjectEventArgs e)
        {
            VerticalAppointmentViewInfo apptViewInfo = e.ObjectInfo as VerticalAppointmentViewInfo;
            if (apptViewInfo != null)
            {
                Rectangle imageBounds = GetImageBoundsFromViewInfo(apptViewInfo);
                e.DrawDefault();
                bool isCustomSelected = (bool)apptViewInfo.Appointment.CustomFields["CheckedIn"];
                e.Graphics.DrawImage(isCustomSelected ? selectedImage : emptyImage, imageBounds);
                e.Handled = true;
            }
        }
  }

为什么我的图片可能为null的任何原因我认为你不必提供完整的路径,除非它在磁盘上?。

修改2

我尝试了一个资源文件,但由于某种原因它也说空了

  selectedImage = WindowsFormsApplication1.SchedurlesImages.selected;
  emptyImage = WindowsFormsApplication1.SchedurlesImages.empty;

1 个答案:

答案 0 :(得分:0)

致电GetManifestResourceStream时,您需要使用您的程序集名称对其进行限定,例如:

emptyImage = Image.FromStream(System.Reflection.Assembly
  .GetExecutingAssembly()
  .GetManifestResourceStream(@"SMBAScheduler.empty.png"));

我可以建议使用基于RESX的资源文件,而不是使用嵌入式资源吗?它将代码生成一个包装器,您可以直接使用静态属性。