通过加载项添加控件后更新表单设计器

时间:2011-04-07 14:30:29

标签: visual-studio add-in envdte form-designer

我正在探索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向表单添加控件的教程,但是他们都没有提到这个问题。

1 个答案:

答案 0 :(得分:1)

我已经找到了我的问题的答案,但我仍然在努力解决它的一些相关问题:

IEventBindingService myIEventBindingService = (IEventBindingService)myDesigner.GetService(typeof(IEventBindingService));
myIEventBindingService.ShowCode();
//obs: myDesigner is of type IDesignerHost

附带问题:

1)代码实际上显示给用户。这是不希望的 2)你不能多次运行它。

您希望多次运行它的原因是,为了能够实际向事件处理程序添加代码,此更新是必需的,因为除非更新设计器,否则无法找到它们。这意味着每个代码都必须在添加每个事件处理程序后添加。所以没有简单的方法来添加它们。

这样我就必须添加所有事件处理程序,更新设计器,通过名称获取对事件处理程序的引用,然后写下他们所做的一切。

我最终要解决这个问题(EnvDTE记录很少),然后我会更新这个答案。