2016-12-09 23 views
1

でローカル関数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で初期化された最初のオブジェクトを指していると仮定します。私は何をしているのだろうか、間違って考えることができます

+0

あなたの質問を完了するためにactiveobj()のコードを提供するべきだと思います。 – Piglet

+0

ピボット: 'activeobj()'関数は、 'm_txtBox:Connect'に正しい文字列値を表示するので正しく機能します。 'wb_responses'を渡すだけで、値は変わりません。 – macroland

答えて

0
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 
    print(wb_responses) --Still prints Obj1 instead of Obj2 
end 

wbresponsesは、初期化した直後に印刷されます。どのようにその価値を変えるべきですか?これらの2行のコード間でイベント処理は行われません。

+0

あなたは正しいです、私は質問を編集しました。 'print(wb_response)'は実際にはチェックボックスイベントの内部にあります。だから、選択が行われた後、私は 'print(wb_responses)'チェックボックスをクリックします。 – macroland

関連する問題