使用EnvDTE在VS Windows Forms Designer中设置按钮属性吗?

问题描述 投票:1回答:1

我正在尝试查看是否可以从控制台程序使用EnvDTE在Visual Studio的窗体设计器中将按钮文本设置为所选按钮。到目前为止,我拥有可以找到VS,获得DTE参考,获得解决方案内部的Project引用以及访问解决方案中大量Project属性的代码。我还可以获取对Forms设计器选项卡/窗口的引用,以便例如打印其标题。

    Console.WriteLine ($"Found form window {formwin.Caption}");
    Console.WriteLine( $"Formwin count is {formwin.Collection.Count}");

但是这就是我卡住的地方。我在空白表格上选择了一个按钮,并且想找到引用formwin.Controls[0].Text = "Hello world.";之类的魔术语法。但是我无法弄清楚如何在设计器的表面上看到控件(窗体和按钮),因此无法设置按钮的text属性。而且我找不到有关执行此操作的任何文档,缺少记录宏以获取一些提示的参考。 (有下载,安装和尝试的扩展名,但是我还不知道它是否适用于这种情况。大多数宏记录器仅执行文本操作。)

任何人都可以对语法进行说明,或者在哪里可以找到示例或说明此方法的文档?谢谢。

更新1:由于TnTinMn的帮助,一些代码显示了一些进展。此方法有效,但是循环引发InvalidCastException,因为将System .__ ComObject强制转换为System.ComponentModel.ComponentCollection是无效的。

    // almost works
    IDesignerHost foo = (IDesignerHost) formwin.Object;
    IContainer container = foo.Container;
    foreach (IComponent component in container.Components) {
      Console.WriteLine (component.GetType ().Name + " : " + component.Site.Name);
    }
winforms envdte
1个回答
0
投票

例如,我也可以参考Forms设计器的选项卡/窗口,以便可以打印其标题。

您已经关闭,但是此时您需要访问WinForm设计器API。

EnvDTE.Window interface暴露Object Property。对于是WinForm设计器窗口的窗口,此属性应该是IDesignerHost Interface的实例。此接口显示RootComponent Property

RootComponent属性将是正在设计的Form的实例。一旦有了该实例,就可以通过其Controls属性来获取所需的Button实例并修改其属性。

© www.soinside.com 2019 - 2024. All rights reserved.