Component (如 BackgroundWorker) 拖放至表單不顯示於設計面,也不在 Controls 集合,表單無 Components 屬性可直接列舉。
解析 Form1.designer.cs 中 components 欄位 (型別 IContainer):
var container = (IContainer)typeof(Form1).GetField("components", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(formInstance);
foreach (IComponent comp in container.Components) {
if (comp is BackgroundWorker) { /* 處理 */ }
}
透過反射取得私有 components 欄位,再列舉 container.Components 即可獲得所有設計時元件。