Winforms 如何将OnLoad事件添加到IronPython WinForm?

Winforms 如何将OnLoad事件添加到IronPython WinForm?,winforms,ironpython,Winforms,Ironpython,从使用WinForms的IronPython脚本中调用OnLoad事件时遇到问题,我已将问题减少到最小可能的情况: 类WindowsApplication10:#命名空间 @静力学方法 def RealEntryPoint(): Application.EnableVisualStyles() Application.Run(DCCForms.Form1()) WindowsApplication10.RealEntryPoint(); 运行时,对于self.Load+=self.\u Fo

从使用WinForms的IronPython脚本中调用OnLoad事件时遇到问题,我已将问题减少到最小可能的情况:

类WindowsApplication10:#命名空间
@静力学方法 def RealEntryPoint(): Application.EnableVisualStyles() Application.Run(DCCForms.Form1())

WindowsApplication10.RealEntryPoint();

运行时,对于self.Load+=self.\u Form1\u Load行,我得到错误“TypeError:Object不可调用”。我在尝试设置textboxchanged时也遇到了相同的错误,但是向按钮添加OnClick处理程序是可行的。上面编写的代码是从VisualStudio2008SDK中的IronPythonStudio示例生成的IronPython1.1.2脚本修改而来的。但是,我在IronPython2.6.1上从PyDev实例内部运行它


如果我删除Load语句,表单将生成并响应OnClick事件(如果指定)。

我已经缩小了范围,使用accepts或returns decorator导致问题的原因是围绕_Form1_加载的decorator。为什么需要@accepts和@returns decorator?它们是由IronPython Studio生成的代码放在那里的,我假设CLR需要它们来确保WinForms可以使用正确的参数调用函数,但是我还没有找到关于它们如何工作的文档。你知道我可以去哪里阅读它们吗?装饰器就在那里,这样IronPython Studio就可以对代码进行往返。我建议改用IronPython工具,但这意味着要么手工设计UI,要么使用WPF而不是WinForms。
from clr import AddReference, accepts, returns, Self
AddReference("System.Windows.Forms")
AddReference("System.Drawing")

import System from System.Windows.Forms import * from System.ComponentModel import * from System.Drawing import *

class DCCForms: # namespace

class Form1(System.Windows.Forms.Form):
    def __init__(self):
        self.InitializeComponent()

    @returns(None)
    def InitializeComponent(self):           
        self.Name = 'Form1'
        self.Text = 'DCC'
        self.Load += self._Form1_Load
        self.ResumeLayout(False)
        self.PerformLayout()

    @accepts(Self(), System.Object, System.EventArgs)
    @returns(None)
    def _Form1_Load(self, sender, e):
        pass