xojo 用按钮调用一个方法
xojo call a method with button
我在 View
方法中有下面的代码来解析 JSON 文件。方法 ContentsOfDictionary
接受参数 d
作为 Xojo.Core.Dictionary
和 level
作为整数,以及 returns 文本。
如果我使用 ContentsOfDictionary
在操作按钮中,我收到此错误:
error: Not Enough arguments: got 0, expected at least 1
Here is a link to the test file I am using.
如何调用方法 ContentsOfDictionary
?
dim dict as Xojo.Core.Dictionary = Xojo.Data.ParseJSON (kJsonData)
const kEOL = &u0A
dim indent as text
for i as integer = 1 to level
indent = indent + " "
next
dim t as text
for each entry as Xojo.Core.DictionaryEntry in dict
t = t + indent + entry.Key + " "
if Xojo.Introspection.GetType( entry.Value ) is nil then
t = t + "nil" + kEOL
else
select case Xojo.Introspection.GetType( entry.Value ).Name
case "Boolean"
t = t + if( entry.Value, "true", "false" ) + kEOL
case "Text"
t = t + entry.Value + kEOL
case "Int32", "Int64"
//
// You get the idea
//
case "Dictionary"
t = t + kEOL + ContentsOfDictionary( entry.Value, level + 1 )
end select
end if
next
return t
更新:下面的 None 适用于@johnnyB 的示例是 ContentsOfDictionary
函数,不应该尝试访问 JSON 数据,而只是处理提供的数据Dictionary
。下面评论里有固定测试项目link
失败是因为您不满足 ContentsOfDictionary
任何签名的参数类型。
entry.Value
是 Auto
类型,因此在调用 ContentsOfDictionary
之前,您需要将 entry.Value
复制到 Dictionary
并将其传递给函数相反。
例如...
...
case "Dictionary"
dim d as new Xojo.Core.Dictionary = entry.Value
t = t + kEOL + ContentsOfDictionary( d, level + 1 )
end select
我在 View
方法中有下面的代码来解析 JSON 文件。方法 ContentsOfDictionary
接受参数 d
作为 Xojo.Core.Dictionary
和 level
作为整数,以及 returns 文本。
如果我使用 ContentsOfDictionary
在操作按钮中,我收到此错误:
error: Not Enough arguments: got 0, expected at least 1
Here is a link to the test file I am using.
如何调用方法 ContentsOfDictionary
?
dim dict as Xojo.Core.Dictionary = Xojo.Data.ParseJSON (kJsonData)
const kEOL = &u0A
dim indent as text
for i as integer = 1 to level
indent = indent + " "
next
dim t as text
for each entry as Xojo.Core.DictionaryEntry in dict
t = t + indent + entry.Key + " "
if Xojo.Introspection.GetType( entry.Value ) is nil then
t = t + "nil" + kEOL
else
select case Xojo.Introspection.GetType( entry.Value ).Name
case "Boolean"
t = t + if( entry.Value, "true", "false" ) + kEOL
case "Text"
t = t + entry.Value + kEOL
case "Int32", "Int64"
//
// You get the idea
//
case "Dictionary"
t = t + kEOL + ContentsOfDictionary( entry.Value, level + 1 )
end select
end if
next
return t
更新:下面的 None 适用于@johnnyB 的示例是 ContentsOfDictionary
函数,不应该尝试访问 JSON 数据,而只是处理提供的数据Dictionary
。下面评论里有固定测试项目link
失败是因为您不满足 ContentsOfDictionary
任何签名的参数类型。
entry.Value
是 Auto
类型,因此在调用 ContentsOfDictionary
之前,您需要将 entry.Value
复制到 Dictionary
并将其传递给函数相反。
例如...
...
case "Dictionary"
dim d as new Xojo.Core.Dictionary = entry.Value
t = t + kEOL + ContentsOfDictionary( d, level + 1 )
end select