从自定义控件调用父控件
本文关键字:控件 调用 自定义控件 | 更新日期: 2023-09-27 17:57:29
我有一个表单,这个表单上有一个带有多个自定义TextBox的流程布局面板该表单重写了基方法Refresh(),还做了一些其他事情。现在,我正在深入研究家长,以便最终出现在表单上并刷新
this.Parent.Parent.Parent.Refresh();
我想在其他表单上重复使用控件,那么有其他方法吗?
我知道一段时间(真的)是可能的:
Boolean diggToParent = true;
var parent = this.Parent;
while (diggToParent)
{
if (parent.Parent != null)
{
parent = parent.Parent;
}
else
break;
}
parent.Refresh();
但是有没有更干净的方法呢?
您可以通过创建并引发由父窗体处理的事件来解决此问题:
public class MyUserControl : UserControl
{
// ...
public event EventHandler RequestRefresh;
// Call this method whenever you want the parent to refresh
private void OnRequestRefresh()
{
if (RequestRefresh != null)
RequestRefresh(this, EventArgs.Empty);
}
}
在父窗体(或应该刷新的容器)中,添加一个事件处理程序,例如
public class MyParentForm : Form
{
public MyParentForm()
{
InitializeComponent();
userCtrl.RequestRefresh += userCtrl_RequestRefresh;
}
// Do whatever the parent thinks is necessary to refresh.
public void userCtrl_RequestRefresh(object sender, EventArgs e)
{
Refresh();
}
// ...
}
这样,当用户控件请求刷新时,父窗体可以决定要做什么。有关事件的详细信息,请参阅此链接。