如何获取添加到当前名称空间的所有用户定义控件的列表? 我正在使用C#2010.从当前名称空间获取用户定义控件列表
0
A
回答
0
有了这些方法,我可以提取所有用户的列表在我的项目中定义的控件,并通过它在我的表单上的名称创建一个用户定义控件的实例。
var assemblies = AppDomain.CurrentDomain.GetAssemblies(); // Get my CurrentDomain Object
Assembly myType = Assembly.GetExecutingAssembly(); // Extract list of all references in my project
foreach (var assembly in assemblies) // Search for the library that contains namespace that have needed controls
{
if (assembly.GetName().ToString().ToUpper().IndexOf("FIBACONTROLS") > -1)
{
myType = assembly; // Get All types in the library
List<Type> myTps = myType.GetTypes().ToList();
Type mT = null;
foreach (Type selType in myTps) // Find the type that refer to needed user-defined control
{
if (selType.Name.ToUpper() == "FIBACOLORPICKER")
{
mT = selType;
break;
}
}
if (mT == null)
return;
object myInstance = Activator.CreateInstance(mT); // Created an instance on the type
Control mFib = (Control)myInstance; // create the control's object
mFib.Name = "Hahah"; // add the control to my form
mFib.Left = 100;
mFib.Top = 200;
mFib.Visible = true;
this.Controls.Add(mFib);
break;
}
}
我尝试添加一些评论来描述它的代码。
它的工作,并确定有一些更好的方式来做到这一点,但我是C#新手,我相信我找到的解决方案并不是最好的。
0
您可以使用反射。试试这个代码:
public static class ControlsFinder
{
public static List<Type> FindControls(Assembly controlsLibrary,
string rootNamespace, bool includeNestedTypes = true)
{
var parent = typeof(UserControl);
return controlsLibrary.GetTypes()
.Where(t => (includeNestedTypes
? t.FullName.StartsWith(rootNamespace)
: t.FullName.Equals($"{rootNamespace}.{t.Name}"))
&& parent.IsAssignableFrom(t))
.ToList();
}
}
用例:
var controls = ControlsFinder.FindControls(Assembly.GetExecutingAssembly(), "WinFrm");
如果你只是想名字,你可以从controls
选择它们:
var names = controls.Select(t => t.Name).ToArray();
相关问题
- 1. 自定义/用户控件之间的名称空间问题
- 2. 获取当前用户名
- 3. 获取当前用户名
- 4. 找不到ASP.net用户控件的名称空间名称
- 5. 获取当前MembershipProvider名称
- 6. ui-grid从自定义排序算法中获取当前列(字段)名称?
- 7. 从Twitter获取当前用户屏幕名称
- 8. Laravel:获取当前路由名称空间(form.blade.php)
- 9. JavaScript:是否可以获取当前名称空间的内容?
- 10. 获取列表框中选定文件的当前文件夹名称
- 11. SharePoint - 获取当前用户列表
- 12. 获取当前文件夹名称
- 13. MGTwitterEngine获取当前登录的用户名和名称
- 14. 获取AppDomain中所有可用名称空间的列表
- 15. 从空表中获取列名列表
- 16. 提取当前的命名空间,捆绑,控制器和动作名称symfony3
- 17. 使用短名称空间定义自定义Android组件?
- 18. 将Web用户控件编译为自定义控件命名空间名称找不到?
- 19. 从列表中获取列名称
- 20. 用ExtJs5定义名称空间
- 21. 虽然从不导入名称空间,但是定义名称空间
- 22. Drupal自定义表单获取并记录当前用户
- 23. 获取当前列名
- 24. MPD,如何获取当前播放列表的名称?
- 25. 使用WMI获取当前用户名
- 26. 从ASP.Net登录控件获取用户名称文本框的名称或ID
- 27. 在C#中获取用户控件的子控件名称
- 28. 如何获取当前控件的名称以动态分配控件文本?
- 29. MVC 5获取当前用户角色名称
- 30. 获取当前用户名的AutoIt
你尝试过什么吗?阅读反思? –
是的,我尝试过。控件添加到名称空间,而名称空间不是对象。我无法从命名空间中提取用户定义的控件列表。 – Farzin