Trouble with strongly-typed Image resources at design-time

  • Thread starter Thread starter Jared
  • Start date Start date
J

Jared

I'm working on a custom control in VS2005, and I'm experiencing a
problem using Image resources from the Resource Manager. My control
has a child collection, and each child has an Image property. My
solution has two projects, one for the control and one for the test
app using the control. I can successfully set and persist the Image
property, and all works fine at runtime and design-time.

However, *once I rebuild the control project* my control breaks in the
using project at design-time with the error "The control (my control)
has thrown an unhandled exception in the designer and has been
disabled". It references a line in my code where I access the Image
property of a child, and it appears the Image is no longer valid.

I do not have this problem if I set the Image property directly -- I
only have a problem when using a strongly-typed Image from the
Resource Manager.

I thought it might be a problem with disposing the Image objects, but
commenting that out didn't resolve the issue.

Does anyone have any tips for the correct usage of strongly-typed
Image resources in custom controls?

TIA
Jared
 
You may be suffering from versioning problems. Remove all asterisks from the
version tags in the AssemblyInfo file.

--
--
Bob Powell [MVP]
Visual C#, System.Drawing

Ramuseco Limited .NET consulting
http://www.ramuseco.com

Find great Windows Forms articles in Windows Forms Tips and Tricks
http://www.bobpowell.net/tipstricks.htm

Answer those GDI+ questions with the GDI+ FAQ
http://www.bobpowell.net/faqmain.htm

All new articles provide code in C# and VB.NET.
Subscribe to the RSS feeds provided and never miss a new article.
 
You may be suffering from versioning problems. Remove all asterisks from the
version tags in the AssemblyInfo file.

--
--
Bob Powell [MVP]
Visual C#, System.Drawing

Ramuseco Limited .NET consultinghttp://www.ramuseco.com

Find great Windows Forms articles in Windows Forms Tips and Trickshttp://www.bobpowell.net/tipstricks.htm

Answer those GDI+ questions with the GDI+ FAQhttp://www.bobpowell.net/faqmain.htm

All new articles provide code in C# and VB.NET.
Subscribe to the RSS feeds provided and never miss a new article.











- Show quoted text -

Thanks for the reply Bob. I tried removing the asterisks, but the
problem persisted. I'm certain this has something to do with me
disposing the Image objects incorrectly because it works fine when I
remove my disposing code. For example, my Image property on the child
control (which derives from Component) is:

public Image Graphic
{
get
{
return _Graphic;
}
set
{
if (!this.DesignMode)
{
// Dispose any previous graphic
if (null != _Graphic)
{
_Graphic.Dispose();
_Graphic = null;
}
}

_Graphic = value;

// Notify the container to redraw
if (null != this.TaskPanel)
{
this.TaskPanel.Invalidate();
}
}
}

If I comment out the check for DesignMode, the control will start
breaking in the using project when I rebuild the control project. I
assume this is because I'm disposing resources held by the Resource
Manager in the using app. I also assume that I should be disposing
the Image objects explicitly at runtime as shown in my code above.

Hopefully this makes sense. Please let me know if you have any more
insight into this behavior. Cheers!
 
Thanks for the reply Bob.  I tried removing the asterisks, but the
problem persisted.  I'm certain this has something to do with me
disposing the Image objects incorrectly because it works fine when I
remove my disposing code.  For example, my Image property on the child
control (which derives from Component) is:

public Image Graphic
{
   get
   {
      return _Graphic;
   }
   set
   {
      if (!this.DesignMode)
      {
         // Dispose any previous graphic
         if (null != _Graphic)
         {
            _Graphic.Dispose();
            _Graphic = null;
         }
      }

      _Graphic = value;

      // Notify the container to redraw
      if (null != this.TaskPanel)
      {
         this.TaskPanel.Invalidate();
      }
   }

}

If I comment out the check for DesignMode, the control will start
breaking in the using project when I rebuild the control project.  I
assume this is because I'm disposing resources held by the Resource
Manager in the using app.  I also assume that I should be disposing
the Image objects explicitly at runtime as shown in my code above.

Hopefully this makes sense.  Please let me know if you have any more
insight into this behavior.  Cheers!- Hide quoted text -

- Show quoted text -

I think I ended up outsmarting myself while trying to create a custom
control that didn't leak memory. My control shouldn't be disposing
resources that it didn't create, so I'll just remove my code that's
disposing the Image object. =)
 
Back
Top