wxlua自我改变价值?

时间:2015-04-02 12:28:28

标签: lua wxwidgets self 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:无法在'wxPaintEvent'类型上调用未知方法'm_panels'。

在我定义为Example的任何其他函数中:SomeFunction()self指向我的Example实例,我可以完全访问其成员,self是wxPaintEvent吗?

这是怎么发生的? Connect会以某种方式改变自我吗?我现在如何访问我的会员?

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

当您在example.OnPaint中注册somePanel:Connect(wx.wxEVT_PAINT, example.OnPaint)作为事件处理程序时,它始终将事件作为第一个参数,但您的方法希望将对象(self)作为第一个参数传递因此你得到的错误。您需要用以下内容替换注册:

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