static void Make()
{
//PDA模拟器共享文件夹 映射的虚拟目录
string dir = "\\Storage Card";
//生成的html放置的目录
string pagesDir = dir + Path.DirectorySeparatorChar+"html";
if (!Directory.Exists(pagesDir))
{
Directory.CreateDirectory(pagesDir);
}
//记录日志
StringBuilder log = new StringBuilder();
//添加MES.PDA.exe引用,然后加载该程序集
Assembly asm = typeof(MES.PDA).Assembly;
//存在失败的窗体,单独生成
List<string> retry = new List<string>() {
//"BarcodeScan"
};
Type formType = typeof(Form);
Type[] newArgs = new Type[0];
int count = 0;
foreach (Type type in asm.GetTypes().Where(t => formType.IsAssignableFrom(t)))
{
string formName = type.Name;
if (retry != null && retry.Count > 0 && !retry.Contains(formName))
{
continue;
}
int step = 1;
log.AppendFormat("-----{0}-------------\r\n", formName);
Form form = null;
try
{
form = type.GetConstructor(newArgs).Invoke(null) as Form;
}
catch(Exception ex) {
log.AppendFormat("ERROR:构造窗体{0}失败:{1}\r\n", formName, ex.Message);
Console.WriteLine("构造窗体{0}失败:{1}", formName, ex.Message);
}
if (form == null)
{
try
{
form = Activator.CreateInstance(type) as Form;
}
catch (Exception ex)
{
log.AppendFormat("ERROR:创建窗体{0}失败:{1}\r\n", formName, ex.Message);
Console.WriteLine("创建窗体{0}失败:{1}", formName, ex.Message);
}
}
if (form == null)
{
continue;
}
try
{
++step;//2
//移除Load事件,否则Show会初始化窗体,访问网络,弹框等
RemoveFormLoadEvent(type, form, formInfo.Item2);
//最小化窗体,否则控制台频繁刷新
form.Size = new Size(1, 1);
//显示窗体,否则Visible全部是False
form.Show();
++step;//3
StringBuilder page = new StringBuilder();
//转换XML
page.AppendFormat("<!--{0}/{1}-->\r\n", TransferXml(formInfo.Item1), TransferXml(form.Text));
//layui-form
page.AppendFormat("<div class=\"layui-form\" lay-filter=\"{0}\">\r\n",formName);
string idPrefix = GetFormPrefix(formName);
if (idPrefix.Length == 1)
{
idPrefix = formName;
}
List<VListTable> tables = null;
GetFormRows(form, out tables).ForEach(r => r.Render(page, idPrefix+"_"));
page.AppendLine("</div>");
//form.Close();不关闭,因没有Load,关闭会报错
++step;//4
/*
page.Append("<script>\r\n");
page.Append(" layui.$(document).on(\"bodyLoaded\",function(){\r\n");
page.Append(" var $ = layui.jquery,\r\n");
page.Append(" form = layui.form,\r\n");
if (tables != null && tables.Count > 0)
{
page.Append(" table = layui.table,\r\n");
}
page.Append(" global = layui.global,\r\n");
page.Append(" util = layui.util;\r\n");
page.Append(" \r\n");
if (tables != null && tables.Count > 0)
{
page.Append(string.Join("", tables.Select(t => string.Format(" window.{0} = table.init('{0}');\r\n", t)).ToArray()));
}
page.Append(" form.render();\r\n");
page.Append(" });\r\n");
page.Append("</script>");
*/
page.Append("<script>\r\n");
page.Append(" initPage({\r\n");
page.Append(" load(container,args){\r\n");
page.Append(" this.container = container;\r\n");
page.Append(" this.args = args;\r\n");
if (tables != null && tables.Count > 0)
{
page.Append(string.Join("", tables.Select(t => string.Format(" table.init(\"{0}_{1}\",{{cellMinWidth:{2},height:{3},page:false}});\r\n", idPrefix, t.id, VListTable.COLUMN_MIN_WIDTH, t.height)).ToArray()));
}
page.Append(" },\r\n");
page.Append(" reload(container,args){\r\n");
page.Append(" },\r\n");
page.Append(" close(){\r\n");
if (tables != null && tables.Count > 0)
{
page.Append(string.Join("", tables.Select(t => string.Format(" table.destroy(\"{0}_{1}\");\r\n", idPrefix, t.id)).ToArray()));
}
page.Append(" }\r\n");
page.Append("</script>");
++step;//5
string pageFileName = pagesDir + Path.DirectorySeparatorChar + formName + ".html";
if (File.Exists(pageFileName))
{
File.Delete(pageFileName);
}
++step;//6 偶尔报UnauthorizedAccessException需要在retry里重新执行一次
using (StreamWriter writer = File.CreateText(pageFileName))
{
writer.Write(page.ToString());
}
++step;//7
++count;
log.AppendFormat("----------{0}:{1},{2}:完成\r\n\r\n", count, formName, formName);
}
catch (Exception ex)
{
log.AppendFormat("{0}:ERROR:解析窗体{1}失败:{2}\r\n", step, formName, ex.Message);
Console.WriteLine("{0}:解析窗体{1}失败:{2}", step, formName, ex.Message);
}
}
if (log.Length > 0)
{
string logFile = "\\Storage Card\\log.txt";
File.Delete(logFile);
using (StreamWriter writer = File.CreateText(logFile))
{
writer.Write(log.ToString());
}
}
}
//移除Load事件
static void RemoveFormLoadEvent(Type type, Form form, string method)
{
if (string.IsNullOrEmpty(method))
{
return;
}
EventInfo loadEvent = type.GetEvent("Load");
if (loadEvent == null)
{
return;
}
MethodInfo loadMethod = type.GetMethod(method, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
if (loadMethod == null)
{
return;
}
MethodInfo removeMethod = loadEvent.GetRemoveMethod();
Delegate loadHandler = Delegate.CreateDelegate(loadEvent.EventHandlerType, form, loadMethod);
removeMethod.Invoke(form, new object[] { loadHandler });
}
05-26
2887
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交