我有大约500个由旧应用程序从XML文件动态生成的WinForms.我想自动将这些转换为我可以在设计器中编辑的VB或C#代码.
我可以手工完成,这需要永远......
或编写装入每个XML,调用旧的应用程序的XML到WinForm的建设者将其转换为一个完整的WinForm的应用程序,并检查每个控件的属性和使用StringBuilder来生成代码,设计师会吞噬.充其量只会是艰巨的.
但是:我想使用设计师使用的相同代码.我认为这将节省我的时间与角落案件.
我想要做的是,采取已建成的WinForm对象,以控制阵列全子控件(由旧的应用程序创建的XML到WinForm的代码),在IDE使用序列化设计的形式相同的代码把它到CodeDom,并获取我可以用真实语言保存的CodeDom语句列表.一旦我拿到CodeDOM,我会很高兴!
这个Codeproject文章体现了我想要做的事情的"概念":从一个完整的表单开始,将其转换('序列化')作为代码.然而,它有两个缺少:(1)它产生使用模板/ StringBuilder的.aspx页,而且那里的属性是(对于web表单细,但WinForms的串行化性质成实际.Designer.vb文件); (2)它是从头开始做到这一切的.我想重新使用visual studio的例程.他们允许您使用许多内容执行此操作,例如,属性网格.我只是想找到一篇文章的链接(也许我的google-fu太弱了),或者是某个人已经做过的短代码示例.
当我在IE 11中打开此HTML并允许编写脚本时,单击下拉列表会使其闪烁并立即消失.有任何想法吗?
这是一个更大的应用程序,具有样式和其他元素,但这是重现它的最小值.
我留下了一些技巧,我试图抵消这一点 - 在onclick和onmouseover你可以看到我试图删除属性的脚本.但是,无论什么打破,下拉列表已经损坏了它.当我删除HTML顶部的脚本以显示工具提示时,甚至会发生这种情况; 它没有出现,但下拉列表仍然被打破.
<html>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script type="text/javascript">
$(function () {
$("[data-tooltip-open=true]").tooltip({
items: "[data-content=true]", content: $(this).data('content'),
position: {
my: "center bottom-20",
at: "center top",
using: function (position, feedback) {
$(this).css(position);
$("<div>")
.addClass("arrow")
.addClass(feedback.vertical)
.addClass(feedback.horizontal)
.appendTo(this);
}
}
}).tooltip("open");
});
</script><body>
<form>
<select name="test"
title="A selection from this list is required."
data-tooltip-open="true" data-content="true"
onclick="$(this).attr('data-tooltip-open','false');$(this).attr('title','');$(this).attr('data-content','false');"
onmouseover="$(this).attr('data-tooltip-open','false');$(this).attr('title','');$(this).attr('data-content','false');">
<option value=""></option>
<option value=" "> </option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
</form>
</body> …Run Code Online (Sandbox Code Playgroud) 这个问题的答案虽然是一个明显的解决方案,但对于这种情况来说还不够.我在原来的问题中加粗了这个原因,解释了为什么我希望它"完全回答" - 感谢LarsTech!
我有一个包含100个WinForms 表单屏幕的库,它是"Beyond My Control",我可以在我的应用程序中共享一些.但是,我的应用程序使用选项卡控件,我需要表单的内容显示在选项卡中而不是弹出窗口.
当我尝试新建其中一个表单并将其添加到选项卡的控件集合时,我收到以下错误消息:
顶级控件无法添加到控件中.
谁知道怎么解决这个问题?我知道还有其他方法涉及更好的架构,但截止日期,积压和富有的新客户等待着.[叹/]
private void button1_Click(object sender, EventArgs e)
{
//panel1.Controls.Add(new Button());
Form f = new Form();
f.Controls.Add(new CheckBox());
//f.ShowDialog();
panel1.Controls.Add(f);
}
Run Code Online (Sandbox Code Playgroud)