由于 ContextMenuStrip 等相关控件不在窗体的Controls集合中,导致无法通过 Form.Controls 遍历找到 ContextMenuStrip 等相关控件,因此通过反射的方式获取
/// <summary>
/// 搜索Form的ContextMenuStrip
/// </summary>
/// <param name="form"></param>
private void FrmMain_FindContextMenuStrip(Form form)
{
if (form is null)
return;
System.Reflection.FieldInfo[] fieldInfo = form.GetType().GetFields(System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
for (int i = 0; i < fieldInfo.Length; i++)
{
switch (fieldInfo[i].FieldType.Name)
{
case "ContextMenuStrip":
{
ContextMenuStrip contextMenuStrip = (ContextMenuStrip)fieldInfo[i].GetValue(form);
break;
}
}
}
}
本文介绍了一种通过反射机制搜索窗体中ContextMenuStrip的方法,由于此类控件不包含在窗体的Controls集合中,常规遍历无法直接获取。通过获取窗体类型的所有非公共实例字段,检查其类型为ContextMenuStrip,从而实现对这类控件的有效搜索。
1931

被折叠的 条评论
为什么被折叠?



