Hello:)

I can change background colour on my existing form like this:

this.BackColor = System.Drawing.Color.Green;

or like this

ActiveForm.BackColor = System.Drawing.Color.Green;

But I have another form called CustomerData
What I want to know is how I go about using a button click event on the first form to change the background colour on the CustomerData form?

Thank you ... John.

Is this other forms already opened?

If your form is already opened:

//form1:
    public partial class Form1 : Form
    {
        Form2 f2;
        public Form1()
        {
            InitializeComponent();
        }

        //open form2 someplace else!!
        //before calling event bellow!
        private void button2_Click(object sender, EventArgs e)
        {
            f2.UpdateFormColor();
        }
    }

//form2:
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public void UpdateFormColor()
        {
            this.BackColor = Color.YellowGreen;
        }
    }

Hope it helps,
Mitja

commented: Constant effort. +8

Hi Mitja,

Thanks for the help. Sorry I should have been clearer from the start. I said one form because I thought that it would make things easier - but I have about ten forms. Some may be open and some may be closed. The idea is that I can have a 'change theme form' holding three buttons that changes all the form backgrounds to any one of those three colour themes when clicked. I don't mind if the background colour doesn't change until the form is closed and reopened again.

I have tried to imitate the above but am getting errors - where it says Form2 I get the error: A namespace cannot directly contain members such as fields or methods. And where it says f2.UpdateFormColor(); I get an error on the f2 that says Error: The name 'f2' does not exist in the current context

But I know that I'm probably missing something - so thanks again ... John - I'll keep trying :0)

Did you check the whole code? The code works, I guess you didnt see the "Form2 f2;" variables on top of the constructor of form1.

public partial class Form1 : Form
    {
        [B]Form2 f2;[/B]
        public Form1()
        {
            InitializeComponent();
        }
 
        //open form2 someplace else!!
        //before calling event bellow!
        private void button2_Click(object sender, EventArgs e)
        {
            f2.UpdateFormColor();
        }
    }

The same goes if you have more forms open. Get all opened forms and create that same method on other forms, and call them:

public partial class Form1 : Form
    {
        [B]Form2 f2;
        Form3 f3;[/B]//you need to have this instances of the forms visible to all class so they can be used!
        public Form1()
        {
            InitializeComponent();           
        }

        private void SetColorToForms()
        {
            foreach (Form form in Application.OpenForms)
            {
                if (form.Name = "Form2")
                    f2.UpdateFormColor();
                else if(form.Name =="Form3")
                    f3.UpdateFormColor();
            }
        }
    }
commented: Extremely helpful ... and patient - thank you. +1

Hi Mitja,

Thanks again for the help. My mistake was more basic I am afraid - I had put

Form2 f2;

in the wrong place ... like this

namespace NWTG_TicketBookingSystem
{   
    Backstage backstage;
         public partial class ChangeTheme : Form
    {

It was obvious when I looked again with fresh eyes. I have now put the forms in the correct place and you are quite right - the code does work - so thank you for that. But, this involves clicking a button on the second form. What I really want to do is a give the choice of three colours on form one, then, for example, if the red button is clicked, then it changes the colour of form 2 to a red background (and all other forms) without any more button clicking on the second form. Is that possible ?

John.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.