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)
   --绘制一些东西
end

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

我收到了以下错误消息: wxLua:无法在“wxPaintEvent”类型上调用未知方法“m_panels”。

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

这是怎么发生的? Connect是否会改变self?现在如何访问我的成员?

感谢任何帮助!

点赞
用户1442917
用户1442917

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

somePanel:Connect(wx.wxEVT_PAINT, function(event) example:OnPaint(event) end)
2015-04-02 15:50:03