0

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

4

1 回答 1

1

我已经找到了我的问题的答案,但我仍然在为它的一些附带问题而苦苦挣扎:

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

附带问题:

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

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

这样,我必须添加所有事件处理程序,更新设计器,通过它们的名称获取对事件处理程序的引用,然后编写它们所做的任何事情。

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

于 2011-04-20T12:36:15.067 回答