我有一个表单,在这个表单上是一个带有多个自定义TextBox的flowlayoutpanel 该表单覆盖了基本方法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();
但有更清洁的方法吗?
答案 0 :(得分:1)
您可以通过创建和引发由父窗体处理的事件来解决此问题:
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();
}
// ...
}
这样,父表单可以决定在用户控件请求刷新时要执行的操作。有关活动的详细信息,请参阅此link。