|
code
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Custom control: How to render an embedded image at design-time?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
Show quote
Hide quote
"Justin" <m9u***@gmail.com> wrote in message You can check to see if you are in design-time or not and set the news:1120776015.775915.70760@g47g2000cwa.googlegroups.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... > width/height in CreateChildControls :) Mythran 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. "Justin" <m9u***@gmail.com> wrote in message Yes, you did...and I said to check for design time in CreateChildControls news:1120779074.331377.40520@g14g2000cwa.googlegroups.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. > 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 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. "Justin" <m9u***@gmail.com> wrote in message You render an image the same way you render one at run-time (anchor news:1120781990.921357.56750@g47g2000cwa.googlegroups.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. > 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 > 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 aswell. 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/scripts/ShowCode.asp?txtCodeId=1960&lngWId=10 >> 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 aswell > 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 Check the other forum for my latest response. Basically, web controls
shouldn't have the image embedded into the dll. As a general rule all of the resources associated with the control should be able to be modified by the site adminstrator. A truly extensible control, should have the ability for the user to replace the associated images and scripts with their own resources without recompiling the control. -- Show quoteHide quoteDirect Email: Michael.Baltic@RemoveCharactersUpTo#NCMC.Com Staff Consultant II Enterprise Web Services Cardinal Solutions Group "Justin" wrote: > >> 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 > >
Show quote
Hide quote
"Justin" <m9u***@gmail.com> wrote in message Yes, you can embed an image without writing the image to the filesystem (in news:1120842808.374097.319430@f14g2000cwb.googlegroups.com... >>> 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 > order for the http handler to receive it). What you would do is create a class that inherits from HttpModule to handle a specific url sent by the client, then place the specific url as the img tag's src property. There are examples on the net on how to stream an image. Pull the image from the assembly manifest as a Stream using the System.Reflection namespace. (GetAssemblyResourceManifest or something, can't remember the exact name of the method of the Assembly class to use). HTH! Mythran Hi,
I have the same problem of wanting to show an embedded resource image in my design time control. Does anyone have the same code to do this? P.S. I was using a url to my web server ....the grpahic shows at run time but not design time....i don't understand why not as the web path is still valid? Thanks a lot. Show quoteHide quote "Justin" <m9u***@gmail.com> wrote in message news:1120855155.431194.316350@o13g2000cwo.googlegroups.com... > Yes, that helps a lot. Thank you very much. > > Justin > Hi,
If you found some code to embed the image at design-time could you post it? Thanks a lot! Show quoteHide quote "Justin" <m9u***@gmail.com> wrote in message news:1120855155.431194.316350@o13g2000cwo.googlegroups.com... > Yes, that helps a lot. Thank you very much. > > Justin > I posted an answer in the other forum.
direct email: userid = Michael.Baltic server = NCMC.com -- Show quoteHide quoteStaff 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. > > Thank you, I replied to it. I'm not exactly sure what your suggestion
was. Justin
Render and Image on a Button
I guess this can't be done can it ? Unhappy call to a 2nd dataItem in ItemTemplate of an asp:TemplateC Tool to monitor/trace all method calls? WinForm as ASP.NET custom control Webcontrol Designer Awareness... Re: accessibility and asp:button Register directive for custom web control in VS 2005 Beta 2 accessing a specific cotrol from web DataGrid control. Button to link with DataGrid |
|||||||||||||||||||||||