将现有Button转换为IPy子类

时间:2010-01-12 20:52:45

标签: ironpython winforms

我有一个测试工具,在我们的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(),这可以正常工作。但是,就我而言,我需要针对现有Button执行OnClick。基本上我想做以下事情,让我模拟按钮上的点击:

  • 获取对现有winforms Button
  • 的引用
  • 将Button转换为自定义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 个答案:

答案 0 :(得分:0)

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