如何从用户控件调用窗体内的函数 (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。后一种方法是松耦合的。
所以我有用户控件,我想 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。后一种方法是松耦合的。