如何从用户控件调用窗体内的函数 (C# Winforms)

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

所以我有用户控件,我想 hide/send 返回,我想在用户控件所在的表单中从控件本身调用 public 函数。

我在用户控件中有一个按钮,代码如下:

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

当我点击按钮时,mainboard 中的 public 函数没有被调用。没有错误,我做错了什么,如何从用户控件调用表单中的函数?

内部无效 mainboard

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

void被引用但没有被调用?

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

解决了上面的问题,我的计时器需要显示时间,我在 class 中而不是在 timer.tick

中定义的时间字符串

试试这个

Form1

显示 Form2

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

调用你想要的方法

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

Form2

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

在 UserControl 中,只需将 ParentForm 转换为键入 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();
    }
}

请注意,这是一种紧密耦合的方法,将用户控件的使用限制在主板上。

更好的方法是让 UserControl 引发某种自定义事件,然后主板表单订阅该事件。当收到事件时,表单本身将 运行 适当的方法。这意味着您可以在不更改其中任何代码的情况下以不同的形式使用 UserControl。后一种方法是松耦合的。