![]() |
Custom control: How to render an embedded image at design-time?
Hi,
I have a custom web server control, specifically a composite control, that includes an image button. The image button takes an ImageUrl property that renders at _runtime_, but at design-time the image does not render unless the user chooses an image. I would like to display a default image at design-time (or _at_least_ reduce the size of the "missing image" icon that Visual Studio displays--it is too big**[see footnote]**). The ImageUrl property can only point to a path, obviously, which means I must depend on the user to have an image at a certain path. Also, I cannot access the Request object (thus neither the Request.ApplicationPath) at design-time, so I can't even get a valid path at design-time anyways. Therefore, I would like to use an embedded resource (an image included in the Visual Studio project, with 'Build Action' marked as "Embedded Resource") at runtime. But from what I can tell, System.Web.UI.Design.ControlDesigner only allows me to really affect the HTML at design-time via GetDesignTimeHtml(). But I cannot display an embedded resource with HTML... Here are relevant parts of my code: --------------------------------------------- public class PopupCalendar : System.Web.UI.WebControls.WebControl, INamingContainer { private TextBox textBox; private Image image; .... protected override void CreateChildControls() { this.Controls.Clear(); textBox = new TextBox(); this.Controls.Add(textBox); textBox.ID = "TextBox"; image = new Image(); this.Controls.Add(image); image.ID = "Image"; } .... } --------------------------------------------- public class PopupCalendarDesigner : WebDesign.ControlDesigner { public override string GetDesignTimeHtml () { PopupCalendar popcal = (PopupCalendar)this.Component; return "<input type=\"text\" style=\"width: " + popcal.Width + "px\" /><img style=\"width: 16px; height: 16px;\">"; } } --------------------------------------------- **[footnote]** I have tried putting "image.Width = Unit.Pixel(16); image.Height = Unit.Pixel(16);" in CreateChildControls(), but that means that only 16x16 images can be used, because this affects _both_ design-time and run-time. Thank you very much for your help! - Justin |
Re: Custom control: How to render an embedded image at design-time?
"Justin" <m9u35g@gmail.com> wrote in message news:1120776015.775915.70760@g47g2000cwa.googlegro ups.com... > Hi, > > I have a custom web server control, specifically a composite control, > that includes an image button. The image button takes an ImageUrl > property that renders at _runtime_, but at design-time the image does > not render unless the user chooses an image. > > I would like to display a default image at design-time (or _at_least_ > reduce the size of the "missing image" icon that Visual Studio > displays--it is too big**[see footnote]**). > > The ImageUrl property can only point to a path, obviously, which means > I must depend on the user to have an image at a certain path. Also, I > cannot access the Request object (thus neither the > Request.ApplicationPath) at design-time, so I can't even get a valid > path at design-time anyways. > > Therefore, I would like to use an embedded resource (an image included > in the Visual Studio project, with 'Build Action' marked as "Embedded > Resource") at runtime. > > But from what I can tell, System.Web.UI.Design.ControlDesigner only > allows me to really affect the HTML at design-time via > GetDesignTimeHtml(). But I cannot display an embedded resource with > HTML... > You can check to see if you are in design-time or not and set the width/height in CreateChildControls :) Mythran |
Re: Custom control: How to render an embedded image at design-time?
As I said in the original message, " I have tried putting "image.Width
= Unit.Pixel(16); image.Height = Unit.Pixel(16);" in CreateChildControls(), but that means that only 16x16 images can be used, because this affects _both_ design-time and run-time. " Unfortunately, that is not too good because that means the image will always be forced to 16x16. Thank you. |
Re: Custom control: How to render an embedded image at design-time?
"Justin" <m9u35g@gmail.com> wrote in message news:1120779074.331377.40520@g14g2000cwa.googlegro ups.com... > As I said in the original message, " I have tried putting "image.Width > = Unit.Pixel(16); image.Height = > Unit.Pixel(16);" in CreateChildControls(), but that means that only > 16x16 images can be used, because this affects _both_ design-time and > run-time. " > > Unfortunately, that is not too good because that means the image will > always be forced to 16x16. > > Thank you. > Yes, you did...and I said to check for design time in CreateChildControls and wrap the code for changing the size with the check. That way, when it renders during run-time, the code for changing the size is not ran. Hope this helps, Mythran |
Re: Custom control: How to render an embedded image at design-time?
I mis-read, I apologize.
The only way I can think of to check for design-time is inelegant, i.e., checking for the existence of a Context object. Do you know a different way? Also, I assume you have no idea how to render an image at design-time? Thanks. |
Re: Custom control: How to render an embedded image at design-time?
"Justin" <m9u35g@gmail.com> wrote in message news:1120781990.921357.56750@g47g2000cwa.googlegro ups.com... >I mis-read, I apologize. > > The only way I can think of to check for design-time is inelegant, > i.e., checking for the existence of a Context object. Do you know a > different way? > > Also, I assume you have no idea how to render an image at design-time? > > Thanks. > You render an image the same way you render one at run-time (anchor tag)...but the path to the image has to be valid in design-time as well. VB.Net: Private ReadOnly Property IsDesignTime() As Boolean Get Return (Not Me.Site Is Nothing) AndAlso Me.Site.DesignMode End Get End Property C#: private bool IsDesignTime { get { return this.Site != null && this.Site.DesignMode; } } hth :) Mythran |
Re: Custom control: How to render an embedded image at design-time
I posted an answer in the other forum.
direct email: userid = Michael.Baltic server = NCMC.com -- Staff Consultant II Enterprise Web Services Cardinal Solutions Group Future Business Model Loan Origination Services National City Mortgage "Justin" wrote: > I mis-read, I apologize. > > The only way I can think of to check for design-time is inelegant, > i.e., checking for the existence of a Context object. Do you know a > different way? > > Also, I assume you have no idea how to render an image at design-time? > > Thanks. > > |
Re: Custom control: How to render an embedded image at design-time?
> You render an image the same way you render one at run-time (anchor
tag)...but the path to the image has to be valid in design-time as well. Yes, but I know of no way to get the project path at design-time**, and I do not want to bundle an image with my webcontrol DLL. > this.Site.DesignMode Thanks, that is the magical property I was hoping for. Justin **Actually, I know of a convoluted way to get the project path at design time: use the EnvDTE library (this is my last resort). See this link: http://www.planet-source-code.com/vb...1960&lngWId=10 |
Re: Custom control: How to render an embedded image at design-time
Thank you, I replied to it. I'm not exactly sure what your suggestion
was. Justin |
Re: Custom control: How to render an embedded image at design-time?
>> You render an image the same way you render one at run-time (anchor
tag)...but the path to the image has to be valid in design-time as well > Yes, but I know of no way to get the project path at design-time**, and I do not want to bundle an image with my webcontrol DLL. My original question was how to render an image in an ASP.NET webcontrol from an embedded resource, which means, I infer, a stream. But System.Web.UI.WebControls.Image has no way of consuming a stream. This is my main question -- how to display an embedded image in a webcontrol at design-time? Do I *have* to write the embedded image to the filesystem, then pass that path to the Image.ImageUrl ? Thank you, Justin |
| All times are GMT. The time now is 07:56 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.