でローカル関数I、すなわちmydialog.lu 2つのLuaのファイル、およびrangecontrol.luaを持っています。そこ(- 異なるファイル
1)ダイアログを開始し、それがtextcontrolがありますrangecontrol.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
コード:
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
簡単に言えば、何が起こるかを次のようにmydialog.luaのコードがあります
2)ユーザーがオブジェクトから選択すると、テキストボックスに値が設定されます。
3)私の目標は、どのオブジェクトから選択が行われたかを追跡することです。
私の混乱:私は選択を追跡rangetextcontrol
を参照渡しする必要がありますwb_responses
ユーザデータの種類を、渡しますが、常にObj1との情報を出力しますので、wb_responses
は決して変わらないようです。したがって、私はそれが常にmydialog.luaで初期化された最初のオブジェクトを指していると仮定します。私は何をしているのだろうか、間違って考えることができます
あなたの質問を完了するためにactiveobj()のコードを提供するべきだと思います。 – Piglet
ピボット: 'activeobj()'関数は、 'm_txtBox:Connect'に正しい文字列値を表示するので正しく機能します。 'wb_responses'を渡すだけで、値は変わりません。 – macroland