Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   ASP .Net Web Controls (http://www.velocityreviews.com/forums/f63-asp-net-web-controls.html)
-   -   Custom control: How to render an embedded image at design-time? (http://www.velocityreviews.com/forums/t776437-custom-control-how-to-render-an-embedded-image-at-design-time.html)

Justin 07-07-2005 10:40 PM

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


Mythran 07-07-2005 11:25 PM

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


Justin 07-07-2005 11:31 PM

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.


Mythran 07-07-2005 11:35 PM

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


Justin 07-08-2005 12:19 AM

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.


Mythran 07-08-2005 04:05 PM

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


Michael Baltic 07-08-2005 04:05 PM

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.
>
>


Justin 07-08-2005 05:07 PM

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


Justin 07-08-2005 05:09 PM

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


Justin 07-08-2005 05:13 PM

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.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57