如果表格关闭,为什么控制计数会减少?

Mar*_*ijn 4 c# winforms

我有一个显示Form对象的面板.当在Close()表单上调用该方法时,会对其panel.Controls.Count进行修改,Count会少一个.这怎么可能?

这是我在面板中显示表单的方式:

// insertForm is a windows form

insertForm.TopLevel = false;
insertForm.Dock = DockStyle.Fill;
insertForm.FormBorderStyle = FormBorderStyle.None;

this.pnlContent.Controls.Clear();
this.pnlContent.Controls.Add(insertForm);
Run Code Online (Sandbox Code Playgroud)

当某个地方form.Close()被调用时,Controls计数pnlContent为0.那么,这怎么可能呢?当Close()被召唤时会发生什么?

Ani*_*Ani 5

关闭表单会导致表单被处理,从而导致表单从其父控件集合中删除.

如果您使用反编译器,您会注意到两件事:

  1. 将控件添加到a时ControlCollection,控件的所有者将设置为ControlCollection's所有者. ControlCollection.Add(Control value)电话 value.AssignParent(this.owner).
  2. 当控件被释放时,它会从其所有者身上移除ControlCollection.基本上,Control.Dispose电话parent.Controls.Remove(this).

获得的经验教训:不要将ControlCollection用作控件的通用集合类型. 它深入集成到WinForms中,用于控制包含和父子关系.仅当您真正需要父控件包含子控件时才使用此类型.