-1

我正在尝试使用 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: Unable to call an unknown method 'm_panels' on a 'wxPaintEvent' 类型。

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

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

感谢任何帮助!

4

1 回答 1

1

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

somePanel:Connect(wx.wxEVT_PAINT, function(event) example:OnPaint(event) end)
于 2015-04-02T15:50:03.380 回答