我有一个名为 Form1 的表单,其主体为 FlowLayoutPanel
这个 FlowLayoutPanel 列出了一堆 UserControl,每当我点击 UserControl 内的删除按钮时,我都希望 FlowLayoutPanel 被更新。
它从名为 listTiles 的列表呈现:
public List<BookModel> listTiles = new List<BookModel>();
如何更新 UserControl 内的主窗体?
使用事件处理程序是处理您可以在此处找到的问题的好主意:将子控件的单击事件传递给父控件
但是,将父表单传递给子表单也可以。例子:
private Form main;
UserControl(Form mainForm)
{
initialize();
main = mainForm;
}
有几种方法可以做到,但我会列出一种
关键是任何特定的子视图都应该有一个事件。假设事件的形式是
event EventHandler<BookModel> RemoveClicked;
这意味着主窗体将需要以下形式的某种形式的事件处理程序:
private void HandleThatEvent(object sender, BookModel model)
{
// do the thing
// handle the event
}
最后,初始化后,主窗体应该订阅该事件。这可以通过设计器完成(事件将列在 misc. 下),或直接通过如下代码完成:
public void AddView(YourUserControl someView)
{
InitializeComponent();
someView.RemoveClicked += HandleThatEvent;
}
如果您正在管理流布局,它可能有一些不同的删除方法.. 例如,您可能需要将引用传递给要删除的控件。因此,如果您不想重新渲染,则可能必须巧妙地匹配已删除的项目。但是,每次列表更改时重新呈现整个流程控制的速度可能一样快。我会先测试一下,如果你从列表中重新渲染它,你是否会在 UI 中遇到任何明显的延迟。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句