GtkBuilder F# 对象引用未设置为对象的实例
GtkBuilder F# Object reference not set to an instance of an object
我在我的简单应用程序上制作主窗口时遇到问题 运行,给出的错误是 - 对象引用未设置为对象的实例。
当应用程序正在调试并且错误发生在 处理程序时会发生这种情况。window1.ShowAll()
我确实在网上找到了一些代码,提示添加一些成员代码,如 member this.Whatever() = window1 但是我不知道这是否与我的代码,或者放在哪里。
我很高兴你能给我任何帮助,因为我一整天都在尝试以多种方式让它工作,但就是做不到。
namespace potato
module Main =
open System
open Gtk
type Handler()=class
[<Object>]
[<DefaultValue(true)>]
val mutable window1 : Window
end
[<EntryPoint>]
let Main(args) =
Application.Init()
let builder = new Builder("GUI.ui")
let handler = new Handler()
builder.Autoconnect(handler)
handler.window1.ShowAll()
Application.Run()
0
这是glade.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.18"/>
<object class="GtkWindow" id="window1">
<property name="width_request">1024</property>
<property name="height_request">576</property>
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
</object>
</interface>
是的,问题就在我眼前,我最终不得不通过旧的测试项目来查看和实现@scrwtp 暗示的内容,这是为 gtk3 gtkbuilder 修复的旧工作代码。
namespace potato
module Main =
open System
open Gtk
type Handler()=class
[<Builder.Object>]
[<DefaultValue(true)>]
val mutable window1 : Window
end
let OnDelete (args:DeleteEventArgs) =
Application.Quit()
args.RetVal <- true
[<EntryPoint>]
let Main (args) =
Application.Init()
let gxml = new Builder("GUI.xml")
let handler = new Handler()
do gxml.Autoconnect(handler)
handler.window1.DeleteEvent
|> Event.add OnDelete
handler.window1.ShowAll()
Application.Run()
0
原因,我现在明白了,我已经指定了一个处理程序,但没有传递任何东西给它,因为没有传递任何东西给它 IE:(handler.window1.DeleteEvent) 当我调用 showall 时它根本不会显示,希望这可以帮助遇到类似问题的其他人
我在我的简单应用程序上制作主窗口时遇到问题 运行,给出的错误是 - 对象引用未设置为对象的实例。
当应用程序正在调试并且错误发生在 处理程序时会发生这种情况。window1.ShowAll()
我确实在网上找到了一些代码,提示添加一些成员代码,如 member this.Whatever() = window1 但是我不知道这是否与我的代码,或者放在哪里。
我很高兴你能给我任何帮助,因为我一整天都在尝试以多种方式让它工作,但就是做不到。
namespace potato
module Main =
open System
open Gtk
type Handler()=class
[<Object>]
[<DefaultValue(true)>]
val mutable window1 : Window
end
[<EntryPoint>]
let Main(args) =
Application.Init()
let builder = new Builder("GUI.ui")
let handler = new Handler()
builder.Autoconnect(handler)
handler.window1.ShowAll()
Application.Run()
0
这是glade.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.18"/>
<object class="GtkWindow" id="window1">
<property name="width_request">1024</property>
<property name="height_request">576</property>
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
</object>
</interface>
是的,问题就在我眼前,我最终不得不通过旧的测试项目来查看和实现@scrwtp 暗示的内容,这是为 gtk3 gtkbuilder 修复的旧工作代码。
namespace potato
module Main =
open System
open Gtk
type Handler()=class
[<Builder.Object>]
[<DefaultValue(true)>]
val mutable window1 : Window
end
let OnDelete (args:DeleteEventArgs) =
Application.Quit()
args.RetVal <- true
[<EntryPoint>]
let Main (args) =
Application.Init()
let gxml = new Builder("GUI.xml")
let handler = new Handler()
do gxml.Autoconnect(handler)
handler.window1.DeleteEvent
|> Event.add OnDelete
handler.window1.ShowAll()
Application.Run()
0
原因,我现在明白了,我已经指定了一个处理程序,但没有传递任何东西给它,因为没有传递任何东西给它 IE:(handler.window1.DeleteEvent) 当我调用 showall 时它根本不会显示,希望这可以帮助遇到类似问题的其他人