Changing page bgcolor from code (repost)

G

GaryDean

In the original post I failed so indicate that I am using framework
1.1.......

I need to be able to change the background color of a page from code. I
found an answer to this question in another forum from Peter Huang that said
that an id="bg" as follows...

<body MS_POSITIONING="GridLayout" runat="server" id="bg">

then we could do the following in our codebehind file....

Private Sub Page_Load(sender As Object, e As System.EventArgs)
bg.Attributes.Add("BgColor", "#ff9933")
End Sub

However, I get the errror that bg is Private.

Is there a solution to this issue where bgcolor, and other attributes of the
document can be changed from codebehind code?
 
J

Juan T. Llibre

If that's all you want to do, why don't you simply do it,
by setting the <body background-color...> attribute ?

You aren't *really* attemptiong to change the background color
from code. You are just setting an arbitrary background color.

If that's all you want to do, why don't you just set it in the <body...>

Otherwise, use the code for the examples I posted.
Those samples allow users to select any background/foreground colors you want to allow.
 
G

GaryDean

Yes I REALLY want to set it at run time - please trust me on this. Not at
design time.

The reason why I don't simply set it in the body is because I want to set it
at run time.

your examples show it working but I can't see your code behind.

Maybe we are not communicating well. I want to find out how to set the
background color at run time from my code behind file.
 
G

GaryDean

I see your solution working and I saw the tutorial on this at gotdotnet.
but this does not appear to be compatible with forms as they are used in
vs.net. for instance...

<form id="Form1" method="post" runat="server">

</form>

The GetStyle call as above and as in your code is not tollerated in vs.net.
I am unable to even return to the design view with that code as is.

As I said before, I (simply) want to find out how to set the background
color at run time from my code behind file. It seems there has to be a way
to reference the bgcolor in the Document from my codebehind.
 
J

Juan T. Llibre

I think you're complicating your life needlessly.

If you don't like that method, use this :

<%@ Page Language="C#" AutoEventWireup="True" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
Changing a Page's Background Color
</title>
<script runat="server">
void SubmitBtn_Click(object Source, EventArgs e)
{
Body1.Attributes["bgcolor"] = ColorSelect.Value;
}
</script>
</head>
<body id="Body1" runat="server">
<h3>Changing a Page's Background Color</h3>
<form id="Form1" runat="server">
<p></p>
Select a background color for the page: <p></p>
<select id="ColorSelect" runat="server">
<option>White</option>
<option>Wheat</option>
<option>Gainsboro</option>
<option>LemonChiffon</option>
</select>
<input id="Submit1" type="submit" runat="server" value="Apply" onserverclick="SubmitBtn_Click"/>
</form>
</body>
</html>

---000---

You should be able to insert that code into code-behind,
almost as it is. I wrote it inline, because I prefer inline coding.

Notice that all I'm doing is adding an id attribute (body1) to the body,
and then changing the bgcolor of that HtmlGenericControl.

All you'd need to do is submit the form programmatically,
with whatever value you are going to give to "Body1.Attributes["bgcolor"]

You can see the above code working at :

http://asp.net.do/WebSite2/CustomizeDemo.aspx




GaryDean said:
I see your solution working and I saw the tutorial on this at gotdotnet. but this does not appear
to be compatible with forms as they are used in vs.net. for instance...

<form id="Form1" method="post" runat="server">

</form>

The GetStyle call as above and as in your code is not tollerated in vs.net. I am unable to even
return to the design view with that code as is.

As I said before, I (simply) want to find out how to set the background color at run time from my
code behind file. It seems there has to be a way to reference the bgcolor in the Document from my
codebehind.
 
S

Steven Cheng[MSFT]

Hi Gary,

I think Juan's suggestion is good. Also, if you do need to programmatically
set the bgcolor for page body in codebehind, we need to mark the body as
"runat=server" and assign an ID, also in codebehind, we need to explicitly
declare a protected control member fields to associate that tag. For
example:

<body id="bd" runat="server" >
===================

public class BgColorPage : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox txtColor;
protected System.Web.UI.WebControls.Button btnSubmit;
protected HtmlGenericControl bd;
===========================

private void btnSubmit_Click(object sender, System.EventArgs e)
{
System.Drawing.Color bgcolor =
System.Drawing.ColorTranslator.FromHtml(txtColor.Text);

bd.Style["BACKGROUND-COLOR"] =
System.Drawing.ColorTranslator.ToHtml(bgcolor);
}
======================

Hope this helps.

Regards,

Steven Cheng
Microsoft Online Support

Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)
 
G

GaryDean

Steven,
that was the answer! It was the declaration of bd as an htmlgeneric control
that was missing.
thanks for your help
 
G

GaryDean

Steven,
I have an interesting complication related to putting a runat="server"
inside my body tag.

On one of my pages I was calling a Javascript function i.e. <body
onload="setcursor".... where I am calling a javascript function. But since
the body is now a server control the page gets an error saying setcursor is
not a part of webform1.aspx.

Do you know of way to call the javascript function now that it has the
runat server?
 
S

Steven Cheng[MSFT]

Hi Gary,

Thanks for your followup.

Yes, I did find the problem you mentioned. It is caused by the
runat='server' control's "onload" is always parsed ast server-side event.
Currently I found that we can use code behind to programmatically assign
the client-side onload script handler for the <body runat="server" > ...
e.g:

======================
<script language="javascript">
function mybd_load()
{
alert("mybd_load...");
}
</script>
</head>
<body id="mybd" runat="server" onclick="mybd_load();">
=========================

=====================
Public Class bodyPage
Inherits System.Web.UI.Page

Protected mybd As HtmlGenericControl

................................

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

mybd.Attributes("onload") = "mybd_load();"
Response.Write("<br/>" & mybd.Attributes("onload"))
End Sub
........................
=====================

Hope this helps.

Regards,

Steven Cheng
Microsoft Online Community Support


==================================================

When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.

==================================================


This posting is provided "AS IS" with no warranties, and confers no rights.
 
G

GaryDean

Thanks, that does it. but....

you don't need the Response.Write("<br/>" & mybd.Attributes("onload")),
all that does is put "<br/>mybd_load()" as the first line of the rendered
html.

anyway that solves the problem :)
 
S

Steven Cheng[MSFT]

Thanks for your response.

Yes, "Response.Write("<br/>" & mybd.Attributes("onload"))" is my test code
:p. Sorry for the confusion.
Also, I'm glad that this is of assistance to you.

Have a good day!

Regards,

Steven Cheng
Microsoft Online Community Support


==================================================

When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.

==================================================


This posting is provided "AS IS" with no warranties, and confers no rights.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top