Python CLR WinForms -从现有表单打开另一个from



我做这么简单的事情有一些极端的困难。我所要做的就是从Python中现有的Windows窗体启动另一个Windows窗体。我已经试过了所有我能想到的方法,但我还是想不出来。下面是一个示例程序:

import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
clr.AddReference("System.ComponentModel")
from System.Windows.Forms import *
from System.Drawing import *
class MyForm(Form):
def __init__(self):
self.StartPosition = FormStartPosition.CenterScreen
self.btnTest = Button()
self.btnTest.Name = 'btnTest'
self.btnTest.Text = "Test"
self.btnTest.Size = Size(80, 30)
self.Controls.Add(self.btnTest)
self.btnTest.Click += self.Add_Control_Limits_Form_Click
def Add_Control_Limits_Form_Click(self, sender, args):
Application.Run(MySecondForm())
class MySecondForm(Form):   
def __init__(self2):
self2.StartPosition = FormStartPosition.CenterScreen
self2.AutoScaleMode = AutoScaleMode.Font
self2.ClientSize = Size(800, 450)
self2.Text = "Form2"
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.Run(MyForm())

当我运行它时,它给了我这个错误信息:

InvalidOperationException:在单个线程上启动第二个消息循环不是一个有效的操作。使用的形式。ShowDialog。

我不认为这是简单的只是把MySecondForm.ShowDialog(),因为我有这个作为一个类。我错过了什么?

我明白了。

因此,在按钮单击事件中,添加以下代码行:
self.TopLevel = False
YF = YourForm()
YF.ShowDialog()
self.TopLevel = True

…如果你想要模态的。我做到了。

您不需要在按钮单击事件中使用Application.Run(MySecondForm())代码。

然后,在第二个表单类中,按您想要的方式初始化表单。

相关内容

最新更新