Solved

c#, change button background color...

Posted on 2014-07-26
8
881 Views
Last Modified: 2014-07-29
In the event below, (sender as Button).ID gives the btn1, btn2, etc. that is pressed.

Question: How can I change the background color (change css file) of the pressed button?

The default CSS of the buttons are also included below.  Please suggest a nice looking pressed style if you know one.

Thank you

   protected void btn1_Click(object sender, EventArgs e)
    {

        string strNo="";

        switch ((sender as Button).ID)
        {
            case "btn1":
                strNo = "f123";
                break;
            case "btn2":
                strNo = "f123";
                break;
            case "btn3":
                strNo = "f123";
                break;
            case "btn4":
                strNo = "f456";
                break;
            case "btn5":
                strNo = "f456";
                break;
            case "btn6":
                strNo = "f456";
                break;
            case "btn7":
                strNo = "f7";
                break;
            case "btn8":
                strNo = "f8";
                break;
            case "btn9":
                strNo = "f9";
                break;
            case "btn10":
                strNo = "f10";
                break;
            case "btn11":
                strNo = "f11";
                break;
            case "btn12":
                strNo = "f12";
                break;
        }
            Response.Write(strNo);
            lblCmdOpt.Text = strNo;
            Session["strNo"] = strNo;
        //   Response.Redirect("Default2.aspx");
        } 

css:
#btn1, #btn2, #btn3, #btn4, #btn5, #btn6, #btn7, #btn8, #btn9, #btn10, #btn11, #btn12
 {
   background: #297cb3;
  background-image: -webkit-linear-gradient(top, #297cb3, #47a1d9);
  background-image: -moz-linear-gradient(top, #297cb3, #47a1d9);
  background-image: -ms-linear-gradient(top, #297cb3, #47a1d9);
  background-image: -o-linear-gradient(top, #297cb3, #47a1d9);
  background-image: linear-gradient(to bottom, #297cb3, #47a1d9);
  -webkit-border-radius: 6;
  -moz-border-radius: 6;
  border-radius: 6px;
  -webkit-box-shadow: 1px 2px 4px #797999;
  -moz-box-shadow: 1px 2px 4px #797999;
  box-shadow: 1px 2px 4px #797999;
  font-family: Arial;
  color: #ffffff;
  font-size: 16px;
  padding: 7px;
  border: solid #1f628d 0px;
  text-decoration: none;
}

Open in new window

PressedButton.png
0
Comment
Question by:Mike Eghtebas
  • 4
  • 4
8 Comments
 
LVL 13

Expert Comment

by:duncanb7
ID: 40222220
Is it what your want ?why don't change it on CSS ?

DUncan

case "btn1":
                strNo = "f456";
               btn1.BackColor = Color.Orange; 
               break

Open in new window

;
0
 
LVL 34

Author Comment

by:Mike Eghtebas
ID: 40222904
Hi Duncan,

Thank you for the response. I tried:
           string strBtn=((sender as Button).ID).ToString();
           Button btn = (Button)this.FindControl(strBtn);
           btn.BackColor = Color.Red;

it doesn't work, I suppose I have to use a session variable to store the name of the button and use it to change that button's color in Page_Load event. As it is, I am not seeing the change of color.

Question: If this sounds reasonable, how do I store the button name in the session variable and reuse it later on?

Thank again,

Mike
0
 
LVL 13

Accepted Solution

by:
duncanb7 earned 500 total points
ID: 40222914
Dear Author,

If you provide more or complete code ( not security issue), it will assist on it
I don't know why I am only one to reply this thread. Could you click "Request Attention" to let other experts assist on it ?


Duncan
0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 34

Author Comment

by:Mike Eghtebas
ID: 40222962
Hi Duncan,

I have revised the code and all session variable works fine. The problem is that ultimately this is css determines what color is used.

Here is the cs code followed by the css for buttons.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;

public partial class MasterPage : System.Web.UI.MasterPage
{
    //Page myMaster = this as Page;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            lblCmdOpt.Text = "IsPostBack";
            if (Session["strBtn"] != null)
            {
                string strBtn = (string)Session["strBtn"];
                Button btn = (Button)this.FindControl(strBtn);
                btn.BackColor = Color.Red;
            }
        }
        else
        {
            lblCmdOpt.Text = (Session["strNo"]==null)? "is null":Session["strNo"].ToString();

        }

    }

    protected void btn1_Click(object sender, EventArgs e)
    {

        string strNo="";
        string strBtn=((sender as Button).ID).ToString();
        switch (strBtn)
        {
            case "btn1":
                strNo = "f123";
                break;
            case "btn2":
                strNo = "f123";
                break;
            case "btn3":
                strNo = "f123";
                break;
            case "btn4":
                strNo = "f456";
                break;
            case "btn5":
                strNo = "f456";
                break;
            case "btn6":
                strNo = "f456";
                break;
            case "btn7":
                strNo = "f7";
                break;
            case "btn8":
                strNo = "f8";
                break;
            case "btn9":
                strNo = "f9";
                break;
            case "btn10":
                strNo = "f10";
                break;
            case "btn11":
                strNo = "f11";
                break;
            case "btn12":
                strNo = "f12";
                break;
        }
            Response.Write(strNo);
            lblCmdOpt.Text = strNo;
            Session["strBtn"] = strBtn;
           Response.Redirect("Default2.aspx",false);
        } 
    }


'.
.
#btn1, #btn2, #btn3, #btn4, #btn5, #btn6, #btn7, #btn8, #btn9, #btn10, #btn11, #btn12
 {
   background: blue;
.
.
}

Open in new window

I think we need to have to have a second set of css for a class name .buttonPressed :
.buttonPressed 
 {
   background: red;
.
.
}

Open in new window

Now, the question really is how to add class="buttonPressed" to the pressed button identified by Session["strBtn"] variable in Page_Load event.

Question: Does this sound reasonable and the only solution?

Meanwhile I tested this and found out the when both ID and class are used in a css file, ID overwrites class. Meaning even if we could do the coding described above add a class to aspx file will not solve the problem.


Toggle Button example below may help with coming up with the solution: http://www.asp.net/AjaxLibrary/AjaxControlToolkitSampleSite/ToggleButton/ToggleButton.aspx

I am reading through but I have not use ajax before.

Thank you,

Mike
0
 
LVL 13

Expert Comment

by:duncanb7
ID: 40226968
Thanks for your points

And it sounds correct  You get session data from other sites page , right ?
Be reminded, ajax is only allowed for the same domain communication within  both pages must
be at http://yourdomain for todays' browser since browser vendor change its policy .

Duncan
0
 
LVL 34

Author Comment

by:Mike Eghtebas
ID: 40227074
Hi Duncan,

I used:
  int i;
       for (i = 1; i < 11; i++)
        {
            Button btn = (Button)this.FindControl("btn" + i.ToString());
           btn.BackColor = btn12.BackColor;
        }


        if (Session["pressedButton"] != null)
        {
            string strButton = Session["pressedButton"].ToString();
            Button btn = (Button)this.FindControl(strButton);
            btn.BackColor = Color.Orange;
            var c = btn12.BackColor;
            c = btn.BackColor;
        }

Open in new window


Note that btn12 has no settings (its blank and gets its style from a css file). So instead of:

btn.BackColor = ""; or btn.BackColor = null; I used btn.BackColor = btn12.BackColor;

At line 14 (var c = btn12.BackColor;) no settings for btn12 reads c="{Name=0, ARGB(0,0,0,0)}", and
At line 15 (c = btn.BackColor;) the settings for the current btn reads c="{Name=Orange, ARGB(255,255,165,0)}",

Question: Can I then replace line 5 (btn.BackColor = btn12.BackColor;) with:

btn.BackColor = "{Name=0, ARGB(0,0,0,0)}";

Because neither of btn.BackColor = ""; or btn.BackColor = null; work.

Mike
0
 
LVL 34

Author Comment

by:Mike Eghtebas
ID: 40227097
0
 
LVL 13

Expert Comment

by:duncanb7
ID: 40227203
I think I misunderstand your question in previous post, you are talking about
the CSS button or CSS output on the ajax website and you are NOT wanting to use Ajax to get session data,
Right ?

For the CSS priority, you can read this article about  style Precedence CSS, http://www.vanseodesign.com/css/css-specificity-inheritance-cascaade/
1-inline-style such as on tag style, for example, <a style="color:....>
2- css id
3- css class
4- css tag element

Duncan
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to resize a div in html 3 37
How do I hook up a command with parameters to an WPF MVVM Menu Item in XAML? 2 18
VB.NET Textbox input validation 4 37
Code enhancement 4 21
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
In this tutorial viewers will learn how to customize the background color and font color of highlighted text using the ::selection element in CSS Begin by defining the selected text as an element in CSS by typing "::selection": Style the ::selection…
In this tutorial viewers will learn how to style rounded corners for elements in CSS using the border-radius property Begin with a normal styled element such as a div: To style all four corners of the div to be the same degree of roundness, use the …

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question