У меня проблема с получением события OnLoad, вызываемого из сценария IronPython, который использует WinForms, я уменьшил проблему до минимально возможного случая воспроизведения:
from clr import AddReference, accepts, returns, Self
AddReference("System.Windows.Forms")
AddReference("System.Drawing")</p>
<p>import System
from System.Windows.Forms import *
from System.ComponentModel import *
from System.Drawing import *</p>
<p>class DCCForms: # namespace</p>
<pre><code>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
класс WindowsApplication10: # пространство имен
@staticmethod
def RealEntryPoint ():
Application.EnableVisualStyles ()
Application.Run (DCCForms.Form1 ())
WindowsApplication10.RealEntryPoint ();
При запуске я получаю сообщение об ошибке «Ошибка типа: объект не вызывается». для строки self.Load + = self._Form1_Load. Я также получил ту же ошибку при попытке изменить текстовое поле, однако добавление обработчика OnClick для кнопки работает. Код, написанный выше, был изменен из сценария IronPython 1.1.2, сгенерированного из студийного образца IronPython из Visual Studio 2008 SDK. Тем не менее, я запускаю его на Iron Python 2.6.1 из экземпляра PyDev.
Если я удаляю оператор Load, форма генерируется и реагирует на события OnClick, если указано.