AIMS/DrawGraph/AreaManage/BoardFormUtil.cs
2022-08-23 21:12:59 +08:00

116 lines
5.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
namespace DrawGraph
{
public class BoardFormUtil
{
public static AreaManageBase AreaManageFactory(string instanceName, object parameter, ZedGraphControl parameter1, TemplateManage parameter2, string parameter3)
{
AreaManageBase reValue = null;
try
{
Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
//object obj = assembly.CreateInstance("ReflectionTest.Test"); //类的完全限定名(即包括命名空间)
object[] parameters = new object[4];
parameters[0] = parameter;
parameters[1] = parameter1;
parameters[2] = parameter2;
parameters[3] = parameter3;
reValue = (AreaManageBase)assembly.CreateInstance("DrawGraph." + instanceName, true, System.Reflection.BindingFlags.Default, null, parameters, null, null);// 创建类的实例
if(reValue == null)
reValue = (AreaManageBase)assembly.CreateInstance("DrawGraph.document." + instanceName, true, System.Reflection.BindingFlags.Default, null, parameters, null, null);
if (reValue != null) reValue.ClassName = instanceName;
}
catch(Exception )
{
}
return reValue;
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dllName">DLL文件名必须在当前运行项目的目录里</param>
/// <param name="nameSpace">命名空间名</param>
/// <param name="instanceName">类名</param>
/// <returns></returns>
public static T GetObjectFactory<T>(string dllName,string nameSpace,string instanceName){
T reValue;
try
{
Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + dllName);//你的loadfile
//Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
//object obj = assembly.CreateInstance("ReflectionTest.Test"); //类的完全限定名(即包括命名空间)
reValue = (T)assembly.CreateInstance(nameSpace + instanceName, true, System.Reflection.BindingFlags.Default, null, null, null, null);// 创建类的实例
}
catch
{
reValue = default;
}
return reValue;
}
/// <summary>
/// 获取对象的所有属性列表
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static List<PropertyObject> GetPropertyList(Object obj, TemplateManage template = null)
{
List<PropertyObject> propertyList = new List<PropertyObject>();
if (obj != null)
{
Type type = obj.GetType();
PropertyInfo[] infos = type.GetProperties();
foreach (PropertyInfo info in infos)
{
try {
Attribute[] attribs = Attribute.GetCustomAttributes(info);
Attribute attrib = attribs.FirstOrDefault<Attribute>(s => s is NoCreatControlAttributs);
//如果增加了NoCreatControlAttributs这个属性的属性则不生成列表
if (attrib != null) continue;
PropertyObject proObj = new PropertyObject();
proObj.Key = info.Name;
Attribute attDesc = attribs.FirstOrDefault<Attribute>(s => s is ClassAttributs);
if (attDesc != null)
{
ClassAttributs cattr = attDesc as ClassAttributs;
if (cattr != null)
{
proObj.Description = cattr.Description;
}
}
//如果不是值类型且没标明ClassAttributs属性标签的引用类型就继续往下循环
if (info.PropertyType != typeof(Color) && info.PropertyType != typeof(int) && info.PropertyType != typeof(string) && info.PropertyType != typeof(DateTime) && info.PropertyType != typeof(Decimal) && info.PropertyType != typeof(bool) && info.PropertyType != typeof(Nullable<int>) && info.PropertyType != typeof(Nullable<DateTime>) && info.PropertyType != typeof(Nullable<Decimal>) && info.PropertyType != typeof(Nullable<bool>))
{
proObj.SubPropertyList = GetPropertyList(info.GetValue(obj, null), template);
}
else
{
object val = info.GetValue(obj, BindingFlags.GetProperty, null, null, null);
proObj.Value = (val != null) ? val.ToString() : "";
proObj.Text = proObj.Value;
}
propertyList.Add(proObj);
} catch (Exception exp) {
MessageBox.Show(exp.Message.ToString());
}
}
}
else
{
//Console.WriteLine(obj.ToString());
}
return propertyList;
}
}
}