приведение существующего Button к подклассу IPy - PullRequest
1 голос
/ 12 января 2010

У меня есть тестовая программа, которая работает во встроенном движке IronPython в нашем приложении C #. Некоторые из тестов - это автоматизация пользовательского интерфейса, имитирующая нажатия кнопок и т. Д.

# 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)
  • Call 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 голосов
/ 13 января 2010

Вы не можете - точно так же, как вы не можете вызвать его из C # или VB.Net или других языков .NET, не имея подкласса. Вместо этого вы, вероятно, хотите вызвать Button.PerformClick ()

...