C# 使用pythonnet定制表单的构造函数

C# 使用pythonnet定制表单的构造函数,c#,python,dll,devexpress,python.net,C#,Python,Dll,Devexpress,Python.net,我对表单的自定义构造函数(在C#中创建)有一个问题,它从DevExpress.v17.1库扩展了XtraForm。它有两个构造函数: protectedbaseform() { 初始化组件(); } 及 protectedbaseform(IClient客户端) { 初始化组件(); …许多代码 } 其中IClient是接口。 此表单有许多依赖项,所有依赖项都在库中编译。 扩展此表单并尝试通过代码创建实例时: class TestApp(基本格式): 定义初始化(自): self.Text=

我对表单的自定义构造函数(在C#中创建)有一个问题,它从DevExpress.v17.1库扩展了XtraForm。它有两个构造函数:

protectedbaseform()
{
初始化组件();
}

protectedbaseform(IClient客户端)
{
初始化组件();
…许多代码
}
其中IClient是接口。 此表单有许多依赖项,所有依赖项都在库中编译。 扩展此表单并尝试通过代码创建实例时:

class TestApp(基本格式):
定义初始化(自):
self.Text=“来自Python的Hello World”
self.components=System.ComponentModel.Container()
self.AutoScaleBaseSize=大小(5,13)
self.ClientSize=Size(392117)
h=WinForms.SystemInformation.CaptionHeight
自身最小尺寸=尺寸(392,(117+h))
#创建按钮
self.button=WinForms.button()
self.button.Location=点(160,64)
self.button.Size=尺寸(150,20)
self.button.TabIndex=2
self.button.Text=“单击我!”
#注册事件处理程序
self.button.Click+=self.button\u Click
#创建文本框
self.textbox=WinForms.textbox()
self.textbox.Text=“你好,世界”
self.textbox.TabIndex=1
self.textbox.Size=大小(126,40)
self.textbox.Location=点(160,24)
#将控件添加到表单中
self.AcceptButton=self.button
self.Controls.Add(self.button)
self.Controls.Add(self.textbox)
def按钮\单击(自身、发送者、参数):
“”“按钮单击事件处理程序”“”
打印(“单击”)
WinForms.MessageBox.Show(“请不要再按此按钮”)
def运行(自):
WinForms.Application.Run(self)
def处置(自我):
self.components.Dispose()
WinForms.Form.Dispose(self)
运行初始化代码:

def main():
form=TestApp()
form.run()
表.Dispose()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
我有一个错误:

回溯(最近一次呼叫最后一次):
文件“C:/Users/v.khvorostianyi/PycharmProjects/CSharp/Test.py”,第141行,in
main()
文件“C:/Users/v.khvorostianyi/PycharmProjects/CSharp/Test.py”,主目录第85行
form=TestApp()
TypeError:没有与给定参数匹配的构造函数
Python=3.6.2,Python=2.3.0
.NET=4.6.1

项目需要进行自动化测试,这种形式需要配合工作流程。
为什么我会有这样的错误?

您的
基表单中的构造函数被
受保护的
访问修饰符隐藏,并且只能在
基表单及其派生类实例中访问。因此,不能使用
form=TestApp()
,因为带有空参数的构造函数是隐藏的

至少有两种方法可以解决此问题:

0。您可以在
BaseForm
构造函数中使用
public
access修饰符

publicbaseform()
{
初始化组件();
}
公共基表单(IClient客户端)
{
初始化组件();
//…许多代码
}
一,。您可以尝试在派生类中使用
\uuuu new\uuu
方法重载.net构造函数:

def\uuuuu新(cls):
返回基窗体。\uuuu新建\uuuu(cls)
在python类TestApp(BaseForm)中,TestApp扩展了BaseForm。谢谢你的帮助。