代码之家  ›  专栏  ›  技术社区  ›  Tom E

将现有按钮强制转换为IPY子类

  •  1
  • Tom E  · 技术社区  · 15 年前

    我有一个测试工具,运行在我们C应用程序的嵌入式Ironpython引擎中。一些测试是模拟按钮点击的UI自动化等。

    # assume code to find an existing button, 'b' is an instance of System.Windows.Forms.Button
    b.OnClick(EventArgs())
    

    我的问题是,上述代码在IPY 2.0.2上有效,而不是在2.6上有效。阅读下面的链接,我可以看到为什么它不再有效。

    http://dlr.codeplex.com/Thread/View.aspx?ThreadId=57324

    所以我创建了一个python子类,如下所示:

    class PyButton(Button):pass
    

    如果要创建pybutton的新实例并尝试onclick(),则此操作很好。但是,在我的例子中,我需要对现有按钮执行onclick。实际上,我想做以下操作,以允许我模拟单击按钮:

    • 获取对现有WinForms按钮的引用
    • 将按钮转换为自定义pybutton子类(允许onclick)
    • 打电话给OnClick

    我试着用 clr.Convert :

    import clr
    from System.Windows.Forms import *
    class PyButton(Button):pass
    # assume b = existing button
    pb = clr.Convert(b, clr.GetClrType(PyButton))
    

    …但是得到这个错误:

    expected Button_2$2, got Button
      input was pb = clr.Convert(b, clr.GetClrType(PyButton))
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   Dino Viehland    15 年前

    你不能-就像你不能在没有子类的情况下从C或VB.NET或其他.NET语言中调用它一样。相反,你可能想打电话给 Button.PerformClick()