SimpleCoder
SimpleCoder

Reputation: 501

How to call a function inside a form from a user control (C# Winforms)

So I have user control I want to hide/send to back and I want to call the public function in my form where the user control is, from the control itself.

I have a button in the user control with the following code:

mainboard MAIN = new mainboard(); // mainboard is a form to call to.
MAIN.PastLockScreen(); // PastLockScreen is a public void inside mainboard

When I click the button the public function in mainboard does not get called. There are no errors, what am I doing wrong, and how can I call a function in a form from a user control?

void inside mainboard

public void PastLockScreen()
{
   lockscreen1.SendToBack(); // lockscreen1 is the usercontrol that this function gets called from
}

The void is being referenced but not called?

Edit: I have done some investigating and turns out that my timers I have in any form or control, also dont work. But buttons on the actual form itself do work. (and yes I did do timerName.Start(); when the form/control loads.)

Solved the issue above, my timers needed to display time, which the time string I defined inside the class instead of inside the timer.tick

Upvotes: 0

Views: 2145

Answers (2)

Idle_Mind
Idle_Mind

Reputation: 39132

From within the UserControl, just cast ParentForm to type mainboard:

// .. form within the UserControl that is CONTAINED by form mainboard ...
private void button1_Click(object sender, EventArgs e)
{
    mainboard MAIN = this.ParentForm as mainboard;
    if (MAIN != null)
    {
        MAIN.PastLockScreen();
    }
}

Note that this is a TIGHTLY COUPLED approach that limits your use of the UserControl to only mainboard.

A better approach would be to make the UserControl raise some kind of custom EVENT that the mainboard form then subscribes to. When the event is received then the form itself would run the appropriate method. This would mean you could potentially utilize the UserControl in a different form without changing any code within it. This latter approach would be LOOSELY COUPLED.

Upvotes: 1

Felipe Cruz
Felipe Cruz

Reputation: 140

Try This

In Form1

to Show the Form2

Form2 frm2 = new Form2();
frm2.Show();

To call the method do you want

Form2 cmd = new Form2();
cmd.PastLockScreen();

In Form2

   public void PastLockScreen()
    {
        this.SendToBack();
    }

Upvotes: 0

Related Questions