3

我目前正在尝试使用带有图形用户界面的 QuickFix 创建一个简单的客户端(发起程序)。我正在使用 Visual Studio 2012 并在 VB.Net 中编程。

这是我的问题:当我启动我的应用程序时,我遇到了这个错误:“WindowsApplication1.exe 中发生了类型为‘System.InvalidOperationException’的未处理异常

附加信息:创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:表单在构造过程中从默认实例引用自身,导致无限递归。在表单的构造函数中,使用“我”来引用表单。”

我的项目中有两个文件,它们是 Client GUI.vb ( http://pastebin.com/virgVNyS ) 和 MyQuickFixApp.vb ( http://pastebin.com/tQ1GXNSx )。第二个包含将 IApplication 与所有子类集成在一起的类。

执行此行时会发生错误:来自客户端 GUI.vb 的“Dimitiator As New SocketInitiator(myApp, storeFactory, settings, logFactory)”,但软件突出显示文件 Application.Designer.vb 中的一行:

Protected Overrides Sub OnCreateMainForm()
    Me.MainForm = Global.WindowsApplication1.ClientGUI
End Sub

你能帮我告诉我什么是错的吗?

非常感谢你 !

4

2 回答 2

4

在处理 WinForms 时,避免问题的最佳做法是Dim filename As String = "initiator.cfg"在构建/加载 GUI 之后(在_Load方法上)初始化所有内容(除了简单的变量分配,例如:很好)。您收到此错误的原因是因为Me.MainForm =在实际创建主 Form ( ) 之前引用了它。

Dim initiator As New SocketInitiator(myApp, storeFactory, settings, logFactory)移至ClientGUI_Load(主窗体的方法),错误将Load Event消失。

注意:如果您想initiator从“任何地方”访问,您应该保留全局声明,但将分配移动到 Load 事件,即:

Dim initiator As SocketInitiator 'at the Class level, outside any sub/function (as previously)

initiator = New SocketInitiator(myApp, storeFactory, settings, logFactory) 'Inside the ClientGUI_Load method. 
于 2013-08-26T07:39:54.683 回答
2

我有类似的问题;我希望我对它的描述和我找到的解决方案可以在未来为其他人提供清晰的信息。

我为网格背景颜色声明了两个常量。选定的行应该是黄色的。我还说过,未选择的行应该是表单上其中一个网格的默认背景颜色:

Private MatchColor As Color = Color.Yellow
Private NormalColor As Color = MyFormsDataGridView.BackgroundColor ' <<< this line is bad.

这是在表单的声明部分,在任何代码运行之前!我得到了错误并且困惑了几个小时。我什至读过这篇文章,但它没有沉入其中。

问题当然是我指的是尚未实例化的表单上的网格属性!

解决方案是:

Private MatchColor As Color = Color.Yellow
Private NormalColor As Color = Color.White ' <<< this is the fix.

然后它加载就好了!

我希望这会有所帮助。

于 2014-09-05T15:30:47.363 回答