2015-04-02 48 views
1

我想提請使用wxlua一些東西。wxlua自我改變的價值?

ExampleClass = {} 

function ExampleClass:New(someWxPanel) 
    local obj = {} 
    setmetatable(obj, self) 
    self.__index = self 
    self.m_panel = someWxPanel 
    return obj 
end 

function ExampleClass:OnPaint() 
    local dc = wx.wxPaintDC(self.m_panel) 
    --paint some stuff 
end 


local example = ExampleClass(somePanel) 
somePanel:Connect(wx.wxEVT_PAINT, example.OnPaint) 

我收到以下錯誤信息: wxLua:無法調用一個未知的方法「m_panels」上「wxPaintEvent」類型。

而在其他功能我定義爲例:SomeFunction()的自我點到我的實例的實例,我可以完全訪問其成員在這裏自我是一個wxPaintEvent?

這是怎麼回事?連接以某種方式改變自我?我現在怎樣才能訪問我的會員?

感謝任何幫助!

+0

setmetatable(obj,self)shoudl be correct。至少這就是我從其他來源,包括Lua參考資料中知道的。 – Piglet 2015-04-02 13:37:16

+0

你說得對。對不起,噪音。 – lhf 2015-04-02 15:59:38

回答

1

當您註冊example.OnPaintsomePanel:Connect(wx.wxEVT_PAINT, example.OnPaint)事件處理程序,它總是獲取事件作爲第一個參數,但你的方法需要的對象(self)作爲第一個參數,因此你的錯誤傳遞。你需要用這樣的東西替換註冊:

somePanel:Connect(wx.wxEVT_PAINT, function(event) example:OnPaint(event) end)