Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GtkBuilder F#对象引用未设置为对象的实例_F#_Gtk3_Gtkbuilder - Fatal编程技术网

GtkBuilder F#对象引用未设置为对象的实例

GtkBuilder F#对象引用未设置为对象的实例,f#,gtk3,gtkbuilder,F#,Gtk3,Gtkbuilder,我在运行简单应用程序的主窗口时遇到问题,给出的错误是-Object引用未设置为对象的实例 在调试应用程序时会发生这种情况,错误发生在handler.window1.ShowAll() 我确实在网上找到了一些代码,提示添加一些成员代码,如member this.Whatever()=window1,但是我不知道这是否与我的代码相关,或者放在哪里 我很高兴你能给我任何帮助,因为我一整天都在努力以多种方式让它工作,但就是做不到 namespace potato module Main = o

我在运行简单应用程序的主窗口时遇到问题,给出的错误是-Object引用未设置为对象的实例

在调试应用程序时会发生这种情况,错误发生在handler.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
名称空间马铃薯
主模块=
开放系统
开放式Gtk
类型处理程序()=类
[]
[]
val可变窗口1:窗口
结束
[]
let Main(args)=
Application.Init()
让生成器=新生成器(“GUI.ui”)
let handler=new handler()
builder.Autoconnect(处理程序)
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>

1024
576
假的

没错,问题就在我眼前,我最终不得不通过旧的测试项目来了解@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
名称空间马铃薯
主模块=
开放系统
开放式Gtk
类型处理程序()=类
[]
[]
val可变窗口1:窗口
结束
让OnDelete(参数:DeleteEventArgs)=
Application.Quit()
args.RetVal Event.add OnDelete
handler.window1.ShowAll()
Application.Run()
0

我现在理解的原因是,我指定了一个处理程序,但没有向它传递任何信息,因为没有传递任何信息,即:(handler.window1.DeleteEvent)在我调用showall时它根本不会显示,希望这能帮助其他有类似问题的人

谁在哪里创建了Window实例并将其分配给
window1
?正如错误所说,在调用ShowAll时,它是空的。是的,我意识到了这一点,我正在努力正确地编写代码,因为我仍然是一个非常好的学习者,我已经设法得到了一些帮助来解决它,并更好地理解它,我会检查,如果是,我会发布结果,不知道任何错误,没有理由道歉。我只是想请你澄清一下/给你一个提示。我现在还不明白,但明天会再做一次。@scrwtp,我想不出这一点,就我所知,window1没有被传递出去,我自己也不知道该怎么做-实际缺少的是
gxml.Autoconnect(处理程序)
行,对吗?我假设它实例化了xml描述的对象图,并将其连接到
处理程序
对象,以便处理程序上的
window1
属性从xml设置为
GtkWindow
对象?不,据我所知,自动连接最初是作为生成器而不是gxml连接的,但由于我没有添加window1事件,因此没有任何操作,因此没有窗口和null,我认为它可能是任何事件,只是为了指定,它有一些事情要做。至少我希望是这样,只是一个空白处理程序?我可以想象是这样的,但是在您看到错误的行中,删除事件没有任何内容(调用
ShowAll
)。如果您现在放弃了
Autoconnect
行,会发生什么情况?免责声明:我对gtkI一无所知。我很确定,如果没有Autoconnect,它将不得不重新编码为一个简单的Gtk应用程序,而不包括外部glade界面设计器