【发布时间】:2016-12-09 02:46:56
【问题描述】:
我有 2 个 Lua 文件,分别是 mydialog.lua 和 rangecontrol.lua。 mydialog.lua 中的代码如下:
local function mydialog()
--omitted
local wb_responses=activeobj() --wb_responses points to the current activeobj(), say Obj1
UI.m_txt=sys.rangetextcontrol(UI.sbSizerInput:GetStaticBox() ,wb_responses) --wb_responses is passed by reference
--Selection event happened
--Omitted
--If clicked on a checkbox execute the following line
print(wb_responses) --Still prints Obj1 instead of Obj2
end
sys.tools.mydialog=mydialog
rangecontrol.lua 中的代码:
local function rangetextcontrol(parent, wb_txtBox)
local m_txtBox=nil
m_txtBox=wx.wxTextCtrl( parent, wx.wxID_ANY, "", wx.wxDefaultPosition, wx.wxDefaultSize, 0 )
local function GetRange()
wb_txtBox=activeobj()
local ws=activeobj():cur()
local rng=ws:selection()
if (rng==nil) then return end
m_txtBox:SetValue(rng:tostring()) -- Here wb_txtBox correctly refers to Obj2
end
m_txtBox:Connect( wx.wxEVT_LEFT_DOWN, function(event)
wb_txtBox=activeobj() --Current activeobj() changed, say Obj2
local ws=wb_txtBox:cur()
ws:connect(GetRange) --There is a selection event, call GetRange
event:Skip()
end)
return m_txtBox
end
sys.rangetextcontrol=rangetextcontrol
简要说明会发生什么:
1) 一个对话框开始,它有一个文本控件(可能有几个文本控件)
2) 当用户从一个对象中进行选择时,会填充文本框。
3) 我的目标是跟踪从哪个对象进行选择。
我的困惑:虽然我传递了wb_responses 一个用户数据类型,它应该通过引用来传递rangetextcontrol 来跟踪选择,但似乎wb_responses 从未改变过它总是在 Obj1 上打印信息。因此,我假设它总是指向在 mydialog.lua 中初始化的第一个对象。我做错了什么/想错了什么?
【问题讨论】:
-
我认为您应该提供 activeobj() 的代码来完成您的问题
-
@Piglet:
activeobj()函数工作正常,因为选择在m_txtBox:Connect中显示了正确的字符串值。只是当我通过wb_responses时,它的值没有改变。