wxlua自改值?

wxlua self changing value?

我正在尝试使用 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 is a wxPaintEvent?

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

感谢任何帮助!

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

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