我正在探索EnvDTE库,并构建表单生成器。
我已经成功地将控件添加到表单中,但是,控件的代码没有添加到表单设计器(formname.Designer.cs),如果我想添加事件处理程序,这是一个问题,因为控件是尚未宣布。
当我双击一个按钮,它将事件处理程序添加到表单设计器中的按钮时,它会添加表单设计器中的所有控件。所以任何更新都应该这样做。
以下是我添加控件的方法:
//this ProjectItem (itemFrom) is a reference to a recently added form,
//and its only window is my form
Window myWindow = itemForm.Document.Windows.Item(1);
IDesignerHost myDesigner = (IDesignerHost)myWindow.Object;
IComponent comp = myDesigner.CreateComponent(typeof(Button), "MyNewButton);
问题: 如何以编程方式更新表单设计器(使用EnvDte或VS API)以获取对我的控件的引用并向其添加事件处理程序?
有一件事很奇怪:我已经找到了几个关于通过VS Add-Ins向表单添加控件的教程,但是他们都没有提到这个问题。
答案 0 :(得分:1)
我已经找到了我的问题的答案,但我仍然在努力解决它的一些相关问题:
IEventBindingService myIEventBindingService = (IEventBindingService)myDesigner.GetService(typeof(IEventBindingService));
myIEventBindingService.ShowCode();
//obs: myDesigner is of type IDesignerHost
附带问题:
1)代码实际上显示给用户。这是不希望的 2)你不能多次运行它。
您希望多次运行它的原因是,为了能够实际向事件处理程序添加代码,此更新是必需的,因为除非更新设计器,否则无法找到它们。这意味着每个代码都必须在添加每个事件处理程序后添加。所以没有简单的方法来添加它们。
这样我就必须添加所有事件处理程序,更新设计器,通过名称获取对事件处理程序的引用,然后写下他们所做的一切。
我最终要解决这个问题(EnvDTE记录很少),然后我会更新这个答案。