Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Web Controls > Custom control: How to render an embedded image at design-time?

Reply
Thread Tools

Custom control: How to render an embedded image at design-time?

 
 
Justin
Guest
Posts: n/a
 
      07-07-2005
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

 
Reply With Quote
 
 
 
 
Mythran
Guest
Posts: n/a
 
      07-07-2005

"Justin" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) 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

 
Reply With Quote
 
 
 
 
Justin
Guest
Posts: n/a
 
      07-07-2005
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.

 
Reply With Quote
 
Mythran
Guest
Posts: n/a
 
      07-07-2005

"Justin" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) 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

 
Reply With Quote
 
Justin
Guest
Posts: n/a
 
      07-08-2005
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.

 
Reply With Quote
 
Mythran
Guest
Posts: n/a
 
      07-08-2005

"Justin" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) 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

 
Reply With Quote
 
Michael Baltic
Guest
Posts: n/a
 
      07-08-2005
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.
>
>

 
Reply With Quote
 
Justin
Guest
Posts: n/a
 
      07-08-2005
> 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

 
Reply With Quote
 
Justin
Guest
Posts: n/a
 
      07-08-2005
Thank you, I replied to it. I'm not exactly sure what your suggestion
was.

Justin

 
Reply With Quote
 
Justin
Guest
Posts: n/a
 
      07-08-2005
>> 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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Render Gray Colors to PDF for Proper Printing & Embedded EMF Images sherazam Java 0 06-12-2012 07:50 AM
Accessing rails render method outside of view / Decorating render Glenn Gillen Ruby 0 11-17-2006 02:30 PM
How to render an embedded image at design-time? Justin M. Keyes ASP .Net Building Controls 4 07-08-2005 08:40 PM
Page.Render do not render complete page Lau Lei Cheong ASP .Net 1 05-15-2004 04:10 AM



Advertisments