我有一个显示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()被召唤时会发生什么?
关闭表单会导致表单被处理,从而导致表单从其父控件集合中删除.
如果您使用反编译器,您会注意到两件事:
ControlCollection,控件的所有者将设置为ControlCollection's所有者. ControlCollection.Add(Control value)电话 value.AssignParent(this.owner).ControlCollection.基本上,Control.Dispose电话parent.Controls.Remove(this).获得的经验教训:不要将ControlCollection用作控件的通用集合类型. 它深入集成到WinForms中,用于控制包含和父子关系.仅当您真正需要父控件包含子控件时才使用此类型.
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |